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

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

12.5.3 Попытки Сафкса

Одно из основных заявлений на попытки для случая, когда последовательности в коллекции S являются всеми суффиксами последовательности X. Такой trie называют суффиксом trie (также известный как суффиксное дерево или дерево положения) последовательности X. Например, рисунок 12.13 (a) показывает, что суффикс trie для восьми суффиксов последовательности «минимизирует». Для суффикса trie, может быть далее упрощено компактное представление, представленное в предыдущей секции. А именно, этикетка каждой вершины - пара (я, j) указание на последовательность X [я.. j]. (См. рисунок 12.13 (b).), Чтобы удовлетворить правило, что никакой суффикс X не является префиксом другого суффикса, мы можем добавить специальный характер, обозначенный с $, который не находится в оригинальномалфавите Sв конце X (и таким образом к каждому суффиксу). Таким образом, если у последовательности X есть длина n, мы строим

trie для набора n натягивает X [я.. n- 1] $, поскольку я = 0..., n- 1.

Оставление свободного места

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

Преимущество компактного представления попыток теперь становится очевидным для попыток суффикса. Начиная с полной длины суффиксов последовательности X из длины n

1 + 2 + + n = n (n2 1), +

хранение всех суффиксов X явно взяло бы O (n2) пространство. Несмотря на это, suf-фиксируют trie, представляет эти последовательности неявно в O (n) пространство, как формально заявлено в следующем суждении.

Суждение 12.10: компактное представление суффикса trie T для последовательности X из длины n использует O (n) пространство.

Строительство

Мы можем построить суффикс trie для последовательности длины n с возрастающим algo-rithm как один данный в Разделе 12.5.1. Это строительство берет O (dn2) время, потому что полная длина суффиксов квадратная в n. Однако (компактный) суффикс trie для последовательности длины n может быть построен в O (n) время со специализированным алгоритмом, отличающимся от того для общих попыток. Этот линейно-разовый строительный алгоритм довольно сложен, однако, и не сообщается здесь. Однако, мы можем использовать в своих интересах существование этого быстрого строительного алгоритма, когда мы хотим использовать суффикс trie, чтобы решить другие проблемы.

12.5. Попытки 585

(a)

(b) Рисунок 12.13: (a) Суффикс trie T для последовательности X = ''минимизируют''. (b) Компактное представление T, где пара (я, j) обозначает X [я.. j].

Используя Sufx Trie

Суффикс trie T для последовательности X может использоваться, чтобы эффективно выполнить вопросы соответствия образца на тексте X. А именно, мы можем определить, является ли образец P подстрокой X, пытаясь проследить путь, связанный с P в T. P - подстрока X, если и только если такой путь может быть прослежен. Поиск вниз trie T предполагает, что узлы в T хранят некоторую дополнительную информацию относительно компактного представления суффикса trie:

Если у узла v есть этикетка (я, j), и Y - последовательность длины y связанный с

путь от корня до (включенного) v, тогда X [j- y + 1.. j] = Y.

Эта собственность гарантирует, что мы можем легко вычислить индекс начала образца в

текст, когда матч происходит.