Изменения

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

Алгоритм МакКрейта

727 байт добавлено, 22:15, 6 мая 2014
Псевдокод
'''return''' head
'''if''' не существует суффиксной ссылки head:
skipped = head.length <font color=green> // Сколько символов нам осталось пропустить без проверки </font> curPos = head.start <font color=green> // Текущая позиция на ребре, нужна для создания ребра по соответствующему символу </font>
'''if''' head совпадает с корнем:
skipped--
curPos++
curNode = head.parent.suf<font color=green> // Текущая вершина </font>
'''while''' непройденная длина больше длины ребра:
curNode = curNode.children[s[curPos]]
Node slowScan(Node node, '''int''' start):
curNode = node <font color=green> // Текущая вершина </font> curPos = start + node.depth <font color=green> // Текущий символ суффикса </font>
'''while''' существует ребро по символу curPos:
child = curNode.children[s[curPos]]<font color=green> // Ребенок по символу суффикса </font> edgePos = 0 <font color=green> // Текущая позиция на ребре </font>
'''while''' символы на ребре совпадают с суффиксом:
curPos++
120
правок

Навигация