Суффиксный бор — различия между версиями
Shagal (обсуждение | вклад) (→Свойства) |
Shagal (обсуждение | вклад) |
||
Строка 9: | Строка 9: | ||
* Можно построить за время <tex>O(n^2)</tex>, последовательно добавив все суффиксы <tex>s</tex>. | * Можно построить за время <tex>O(n^2)</tex>, последовательно добавив все суффиксы <tex>s</tex>. | ||
* Имеет порядка <tex>n^2</tex> вершин. | * Имеет порядка <tex>n^2</tex> вершин. | ||
+ | |||
+ | == Реализация == | ||
+ | <tex>int </tex> <tex>[length ^ 2][alphabet] </tex> <tex> table</tex> | ||
+ | <tex>int </tex> <tex> number = 1 </tex> | ||
+ | '''<tex>\text{Add}(int </tex> <tex> i, j)</tex>''' | ||
+ | <tex> int </tex> <tex> current = 0 </tex> | ||
+ | <tex>for</tex> (<tex>char </tex> <tex> c \in s[i, j])</tex> | ||
+ | <tex> if (table[current][c] \neq -1) </tex> //проверка есть ли ребро с текущим символом | ||
+ | <tex> table[current][c] = number </tex> | ||
+ | <tex> number++; </tex> | ||
+ | <tex> current = table[current][c]</tex> | ||
+ | '''<tex>\text{Build}</tex> <tex>(String </tex> <tex> s)</tex> | ||
+ | добавляем все суффиксы. | ||
==Хранение в памяти== | ==Хранение в памяти== |
Версия 15:15, 17 апреля 2012
Суффиксный бор (англ. suffix trie) — бор, содержащий все суффиксы данной строки.
По определению, в суффиксном боре для строки
(где ) содержатся все строки . Сделаем следующее наблюдение: если в суффиксном боре находится строка , то все ее префиксы уже содержатся в нашем боре. Значит, суффиксный бор можно использовать для поиска всех подстрок строки (чтобы бор формально содержал все подстроки , нужно пометить все его вершины терминальными, при этом корень будет соответствовать пустой строке ).Свойства
Суффиксный бор для строки
:- Можно использовать для поиска образца в строке за время .
- Можно построить за время , последовательно добавив все суффиксы .
- Имеет порядка вершин.
Реализация
( //проверка есть ли ребро с текущим символом
добавляем все суффиксы.
Хранение в памяти
Пусть сжатое суффиксное дерево.
, . Из третьего свойства следует, что для хранения суффиксного бора в худшем случае потребуется памяти. Если не хранить массив переходов по символам для вершин, где такой переход единственный, то можно получить оценку . Улучшением суффиксного бора, расходующим всего памяти, является