Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

12.5. Попытки 581

(a)

(b)

Рисунок 12.10: Word, соответствующий и префикс, соответствующий стандарту trie: (a) текст, который будет обыскан; (b) стандарт trie для слов в тексте (статьи и предлоги, которые также известны как слова остановки, исключили), с внешними узлами, увеличенными с признаками положений слова.

Есть потенциальная космическая неэффективность в стандарте trie, который вызвал развитие сжатого trie, который также известен (по историческим причинам) как Патрисия trie. А именно, есть потенциально много узлов в стандарте trie, у которых есть только один ребенок, и существование таких узлов - отходы. Мы обсуждаем сжатый trie затем.

582 Глава 12. Последовательности и динамическое программирование

12.5.2 Сжатые попытки

Сжатый trie подобен стандарту trie, но он гарантирует что каждый внутренний узел

в trie имеет по крайней мере двух детей. Это проводит в жизнь это правило, сжимая цепи узлов единственного ребенка в отдельные края. (См. рисунок 12.11.) Позволяют T быть стандартом trie. Мы говорим, что внутренний узел v T избыточен, если v имеет одного ребенка и не является корнем. Например, у trie рисунка 12.9 есть восемь избыточных узлов. Позвольте нам

также скажите что цепь k³ 2 края

(v0, v1) (v1, v2) (vk-1, vk),

избыточно если:

vi избыточен поскольку я = 1..., k- 1

v0 и vk не избыточны

Мы можем преобразовать T в сжатый trie, заменив каждую избыточную цепь

(v0, v1) (vk-1, vk) k³ 2 края в единственный край (v0, vk), повторно маркируя vk с

связь этикеток узлов v1..., vk.

Рисунок 12.11: Сжатый trie для последовательностеймедведь, звонок, предложил цену, играет на повышение, покупает, продает, снабжает,

остановитесь. Сравните это со стандартом trie показанный в рисунке 12.9.

Таким образом узлы в сжатом trie маркированы последовательностями, которые являются подстроками последовательностей в коллекции, а не с отдельными знаками. Преимущество сжатого trie по стандарту trie состоит в том, что число узлов сжатого trie пропорционально числу последовательностей а не к их полной длине, как показано в следующем суждении (соответствуйте Суждению 12.8).

Суждение 12.9: сжатый trie хранение коллекции S s натягивает от

у алфавита размера d есть следующие свойства:

• У каждого внутреннего узла T есть по крайней мере два ребенка и большинство d детей

У T есть s внешние узлы • Число узлов T - O (s)

12.5. Попытки 583

Внимательный читатель может задаться вопросом, обеспечивает ли сжатие путей

любое значительное преимущество, так как это возмещено соответствующим расширением этикеток узла. Действительно, сжатый trie действительно выгоден только, когда он используется в качестве вспомогательной структуры индекса по коллекции последовательностей, уже сохраненных в основной структуре, и не требуется, чтобы фактически хранить все знаки последовательностей в коллекции.

Предположим, например, что коллекция S последовательностей является множеством последовательностей S [0],

S[1]..., S [s- 1]. Вместо того, чтобы хранить этикетку X из узла явно, мы представляем

это неявно тройкой целых чисел (я, j, k), такой, что X = S [я] [j. k]; то есть, X

подстрока S [я] состоящий из знаков от jth до kth включен. (См. пример в рисунке 12.12. Также соответствуйте стандарту trie рисунка 12.10.)

(a)

(b)

Рисунок 12.12: (a) Коллекция S последовательностей сохранен во множестве. (b) Компактный represen-tation сжатого trie для S.

Эта дополнительная схема сжатия позволяет нам уменьшать полное пространство для самого trie от O (n) для стандарта trie к O (s) для сжатого trie, где n - полная длина последовательностей в S, и s - число последовательностей в S. Мы должны все еще сохранить различные последовательности в S, конечно, но мы, тем не менее, уменьшаем пространство для trie.