Изменения

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

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

565 байт добавлено, 10:53, 21 апреля 2015
Реализация
'''int''' n = s.length()
'''Node''' root = new Node(0, 0, 0, null)
'''Node''' node = root<font color=green>// вершина, в которой мы остановились на предыдущем шаге текущей итерации</font> '''int''' tail = 0<font color=green>// длина в символах до конца максимального не уникального суффикса</font>
'''for''' i = 0..n
node = ch
ch = ch.children[s[i - tail]]
'''if''' ch == null<font color=green>// используем правило продления 2.1</font>
node.children[s[i]] = new Node(i, n, node)
'''if''' last <tex>\ne</tex> null
'''else'''
t = s[ch.begin + tail]
'''if''' t == s[i]<font color=green>// используем правило продления 3</font>
'''if''' last <tex>\ne</tex> null
last.suffixLink = node
'''break'''
'''else'''<font color=green>// используем правило продления 2.2</font>
'''Node''' splitNode = new Node(ch.begin, ch.begin + tail, node)
splitNode.children[s[i]] = new Node(i, n, splitNode)
Анонимный участник

Навигация