Изменения
→Поиск строки максимальной длины, ветвящейся влево и вправо 1.1
{{Определение
|definition=
'''Строка <tex>s</tex> называется ветвящейся вправо в <tex>t</tex>''' (англ. ''right merging string''), если существуют символы <tex>c</tex> и <tex>d</tex>, такие что <tex>c</tex> <tex>\ne</tex> <tex>d</tex> : <tex>sc</tex> и <tex>sd</tex> {{--- }} подстроки <tex>t</tex>. Аналогично, '''ветвящаяся влево''' (англ. ''left merging''), если <tex>cs</tex> и <tex>ds</tex> {{--- }} подстроки <tex>t</tex>.
}}
[[Файл:RightMergingSS.png|thumb|rightcenter|Суффиксное дерево для строки <tex>aabcabd</tex>]]Первая часть алгоритма: построим Суффиксное Построим cуффиксное дерево при помощи [[Алгоритм Укконена|Алгоритма Укконена]]. При создании ответвления будем увеличивать счётчик вершины, от которой идёт новый лист, на 1, если его пометка В полученном дереве не листовой вершине <tex>\nev</tex> будет соответствовать подстрока <tex>\$s</tex>. Таким образом, если у которая ветвится вправо, при условии, что количество "хороших" детей вершины счётчик <tex>v >2</tex> 1("хорошие" дети - листы, то подстрока, которую мы восстановим, идя вверх по дереву до корня, будет ветвящейся вправо (в метка которых <tex>\ne\$</tex>). В примере для строки <tex>aabcabd</tex> это <tex>b</tex>, <tex>a</tex> и <tex>ab</tex>). Далее введём термины ''левый символ'' и ''вершина различная влево'', что бы найти строки, ветвящиеся влево.
{{Определение
|definition=
'''Левый символ''' для позиции <tex>i</tex> строки <tex>S</tex> {{- --}} это символ <tex>S(i-1)</tex>.'''Левым символом''' листа <tex>L</tex> называется ''левый символ '' начала суффикса, представляемого этим листомведущего в этот лист.
}}
{{Определение
о строке, ветвящейся вправо и влево
|statement=
Строка <tex>a</tex>, соответствующая пути к вершине <tex>v</tex>, является ветвящейся вправо и влево тогда и только тогда, когда вершина <tex>v</tex> ''различна влево'' и счётчик вершины <tex>>1</tex> 1.
|proof=
<tex>\Leftarrow</tex>
<tex>\Rightarrow</tex>
}}
Далее соберём все строки удовлетворяющие условию теоремы и найдём среди них максимальную (так же этот алгоритм можно использовать для нахождения количества строк, ветвящихся влево и вправо).
Таким образом мы умеем искать строку максимальной длины, ветвящуюся влево и вправо за <tex>ST+O(Nn)</tex>.
==См. также==