Изменения

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

Сжатое суффиксное дерево

326 байт убрано, 00:01, 2 июня 2012
Построение суффиксного дерева
<tex>start \leftarrow go[cur][s[l]].l </tex>
<tex>finish \leftarrow go[cur][s[l]].r </tex>
<tex>hasBreak hasCut \leftarrow false </tex>
'''for''' <tex> j = start </tex> '''to''' <tex> finish </tex> //для каждого символа на ребре из текущей вершины
'''if''' <tex>s[l+j-start] <>s[j] </tex> //если нашли не совпадающий символ
newEdgecutEdge(<tex>cur</tex>) //создаем вершину на ребре <tex>hasBreak hasCut \leftarrow true </tex>
'''break'''
'''if''' <tex>!hasBreakhasCut</tex>
<tex>cur \leftarrow go[cur][s[l]].v </tex> //переходим по ребру
<tex>l \leftarrow l + finish - start </tex> //двигаемся по суффиксу на длину подстроки, записанной на ребре
<tex>count++</tex>
newEdgecutEdge(<tex>cur</tex>) <tex>next \leftarrow go[cur][s[l]].v</tex> createVertex(<tex>cur, l, j - 1</tex>) <tex>cur \leftarrow go[cur][s[l]].v</tex> createVertex(<tex>cur, j, r</tex>) <tex>go[cur][s[j]].v \leftarrow next </tex> <tex>go[cur][s[j]].l \leftarrow j </tex> <tex>go[cur][s[j]].r \leftarrow r </tex>
80
правок

Навигация