Изменения

Перейти к: навигация, поиск

Алгоритм Укконена

556 байт добавлено, 09:56, 1 мая 2015
Использование суффиксных ссылок
=== Использование суффиксных ссылок ===
[[Файл:ExampleUkkonen7.png|300px|thumb|right|Использование суффиксных ссылок.]]
Суффиксные ссылки используются для тогоСейчас на каждой итерации алгоритм выполняет <tex>O(n^2)</tex> действий, так как до конца каждого суффикса мы спускаемся из корня. Заметим, чтобы можно что быстрее было быстро перейти бы спуститься от корня только один раз, до конца суффикса, который мы продлеваем первым на текущем шаге, а потом каким-то способом переходить от конца одного суффикса к концу другогоза <tex>O(1)</tex>. Суффиксные ссылки используются как раз для того, а не спускаться каждый раз от корнячтобы делать подобные переходы. Пусть Рассмотрим один такой переход, пусть мы только что продлили суффикс <tex>s[j..i-1]</tex> до суффикса <tex>s[j..i]</tex>. Теперь с помощью построенных ссылок найдем конец суффикса <tex>s[j+1..i-1]</tex>, чтобы продлить его до суффикса <tex>s[j+1..i]</tex>. Пройдем вверх по дереву до ближайшей внутренней вершины <tex>v</tex>, в которую ведет путь, помеченный <tex>s[j..r]</tex>. У вершины <tex>v</tex> есть суффиксная ссылка, так как ссылка для внутренней вершины строится внутри фазы создания этой вершины. Пусть суффиксная ссылка ведет в вершину <tex>u</tex>, которой соответствует путь с пометкой <tex>s[j+1..r]</tex>. Теперь пройдем от вершины <tex>u</tex> вниз по дереву к концу суффикса <tex>s[j+1..i-1]</tex>, и сделаем продление до суффикса <tex>s[j+1..i]</tex>.
=== Построение суффиксных ссылок ===
275
правок

Навигация