Изменения

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

Двусторонний алгоритм

92 байта добавлено, 10:33, 28 апреля 2016
Псевдокод
<tex>\langle</tex>l1, p1<tex>\rangle</tex> = maxSuffix(pattern, <tex>\leqslant</tex>)
<tex>\langle</tex>l2, p2<tex>\rangle</tex> = maxSuffix(pattern, <tex>\geqslant</tex>)
'''int''' l = 0
'''int''' p = 0
'''if''' l1 <tex>\geqslant</tex> l2
l = l1
p = p2
<font color=green>//<tex>p</tex> <tex>-</tex> период <tex>x</tex>, <tex>l</tex> <tex>-</tex> такая критическая позиция, что <tex>l<p</tex></font>
'''int''' occurences = <tex>\varnothing</tex> '''int''' pos = 0 '''int''' memPrefix = 0
'''while''' pos + pattern.length <tex>\leqslant</tex> text.length
<font color=green>//первый этап: просмотр <tex>v</tex> слева направо</font>
'''int''' i = max(l, memPrefix) + 1
'''while''' i <tex>\leqslant</tex> pattern.length '''and''' pattern[i] = text[pos + i]
i++
'''else'''
<font color=green>//второй этап: просмотр <tex>u</tex> справа налево</font>
'''int''' j = l
'''while''' j <tex> > </tex> memPrefix '''and''' pattern[j] <tex>=</tex> text[pos + j]
j--
Анонимный участник

Навигация