Суффиксный бор — различия между версиями
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) — бор, содержащий все суффиксы данной строки.
По определению, в суффиксном боре для строки (где ) содержатся все строки . Сделаем следующее наблюдение: если в суффиксном боре находится строка , то все ее префиксы уже содержатся в нашем боре. Значит, суффиксный бор можно использовать для поиска всех подстрок строки (чтобы бор формально содержал все подстроки , нужно пометить все его вершины терминальными, при этом корень будет соответствовать пустой строке ).
Свойства
Суффиксный бор для строки :
- Можно использовать для поиска образца в строке за время .
- Можно построить за время , последовательно добавив все суффиксы .
- Имеет порядка вершин.
Реализация
( //проверка есть ли ребро с текущим символом
добавляем все суффиксы.
Хранение в памяти
Пусть , . Из третьего свойства следует, что для хранения суффиксного бора в худшем случае потребуется памяти. Если не хранить массив переходов по символам для вершин, где такой переход единственный, то можно получить оценку . Улучшением суффиксного бора, расходующим всего памяти, является сжатое суффиксное дерево.
