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

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

12.5 Попытки

Алгоритмы соответствия образца, представленные в предыдущей секции, ускоряют поиск в тексте, предварительно обрабатывая образец (чтобы вычислить функцию неудачи в алгоритме KMP или последнюю функцию в алгоритме BM). В этой секции мы проявляем дополнительный подход, а именно, мы представляем алгоритмы поиска строки, которые предварительно обрабатывают текст. Этот подход подходит для заявлений, где серия вопросов выполнена на фиксированном тексте, так, чтобы начальные затраты на предварительную обработку текста были даны компенсацию ускорением в каждом последующем вопросе (например, веб-сайт, который предлагает образец, совпадающий по Гамлету Шекспира или поисковой системе, которая предлагает веб-страницы по теме Гамлета).

trie (объявленный «попыткой») является основанной на дереве структурой данных для хранения последовательностей, чтобы поддержать быстрое соответствие образца. Главное заявление на попытки находится в infor-поиске страны. Действительно, название «trie» происходит от слова «поиск». В применении информационного поиска, таком как поиск определенной последовательности ДНК в геномной базе данных, нам дают коллекцию S последовательностей, все определенное использование того же самого алфавита. Основные операции по вопросу, который пробует поддержку, являются соответствием образца и соответствием префикса. Последняя операция включает быть данным последовательность X, и ищущий все последовательности в S, которые содержат X как префикс.

12.5.1 Стандартные попытки

Позвольте S быть рядом s последовательности оталфавита S, таким образом, что никакая последовательность в S не префикс

из другой последовательности. Стандарт trie для S является заказанным деревом T со следующими свойствами (см. рисунок 12.9):

• Каждый узел T, кроме корня, маркирован характеромS.

• Заказ детей внутреннего узла T определен a

канонический заказалфавита S.

У T есть s внешние узлы, каждый связанный с рядом S, таких что довод «против» -

образование цепи этикеток узлов на пути от корня до внешнего

узел v T приводит к ряду S, связанных с v.

Таким образом trie T представляет ряды S с путями от корня до внешних узлов T. Отметьте важность предположения, что никакая последовательность в S не префикс другой последовательности. Это гарантирует, что каждый ряд S уникально связан с внешним узлом T. Мы можем всегда удовлетворять это предположение, добавляя специальный характер, который не находится в оригинальномалфавите S в конце каждой последовательности.

Внутренний узел в стандарте trie T может иметь где угодно между 1 и d chil-dren, где d - размер алфавита. Есть край, идущий от корня r одному из его детей для каждого характера, который является первым в некоторой последовательности в коллекции S. Кроме того, путь от корня T к внутреннему узлу v на глубине i соответствует

12.5. Попытки 579

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

префикс i-характера X [0.. я- 1] последовательности X из S. Фактически, для каждого характера c это

может следовать за префиксом X [0.. я- 1] в последовательности набора S, есть ребенок маркированного v

с характером c. Таким образом trie кратко хранит общие префиксы, которые существуют

среди ряда последовательностей.

Если есть только два знака в алфавите, то trie - по существу двоичное дерево с некоторыми внутренними узлами, возможно имеющими только одного ребенка (то есть, это может быть неподходящее двоичное дерево). В целом, если будут d знаки в алфавите, то trie будет многоканальным деревом, где каждый внутренний узел имеет между 1 и d дети. Кроме того, вероятно, будет несколько внутренних узлов в стандарте trie, у которых есть меньше, чем d дети. Например, у trie, показанного в рисунке 12.9, есть несколько внутренних узлов только с одним ребенком. Мы можем осуществить trie с деревом, хранящим знаки в его узлах.

Следующее суждение обеспечивает некоторые важные структурные свойства стандарта trie.

Суждение 12.8: у стандарта trie хранение коллекции S s последовательностей полной длины n от алфавита размера d есть следующие свойства:

• Каждый внутренний узел T имеет в большинстве d детей • У T есть s внешние узлы • Высота T равна длине самой длинной последовательности в S • Число узлов T - O (n)

580