Изменения

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

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

Нет изменений в размере, 23:35, 28 мая 2014
Оптимизация алгоритма Укконена
{{Лемма
|statement=
Если в какой-то момент работы алгоритма Укконена будет создан лист с меткой <tex>ji</tex> (для суффикса, начинающегося в позиции <tex>ji</tex> строки <tex>S</tex>), он останется листом во всех последовательных деревьях, созданных алгоритмом.
<br />
|proof=
Это верно потому, что у алгоритма нет механизма продолжения листового ребра дальше текущего листа. Если есть лист с суффиксом <tex>ji</tex>, правило продолжения 1 будет применяться для продолжения <tex>ji</tex> на всех последующих фазах.
}}
{{Лемма
|statement=
В любой фазе, если правило продолжения 3 применяется в продолжении <tex>ji</tex>, оно будет реализовываться во всех дальнейших продолжениях(от <tex>j i + 1</tex> по <tex>i j + 1</tex>) до конца фазы.
<br />
|proof=
При использовании правила продолжения 3 путь, помеченный <tex>S[ji..ij]</tex> в текущем дереве, должен продолжаться символом <tex>ij+1</tex>⁠, и точно так же продолжается путь, помеченный <tex>S[j i + 1..ij]</tex>⁠⁠⁠⁠⁠⁠⁠⁠⁠⁠, поэтому правило 3 применяется в продолжениях <tex>j i + 1, j i + 2, ..., i j + 1</tex>
}}
<br />
Когда используется правило 3, никакой работы делать не нужно, так как требуемый суффикс уже в дереве есть. Поэтому можно заканчивать каждую фазу <tex>i j + 1</tex> после первого же использования правила прохождения 3. Если это случится в продолжении ji, то уже не требуется явно находить концы строк <tex>S[k..ij]</tex> с <tex>k > ji</tex>.
==Алгоритм Укконена за квадратичное время==
299
правок

Навигация