Изменения

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

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

21 байт убрано, 18:01, 22 мая 2015
Поиск строки максимальной длины, ветвящейся влево и вправо
Чтобы найти строки, ветвящиеся влево, нужно проверить все внутренние вершины суффиксного дерева на различность влево. Если какая-то вершина <tex>v</tex> будет различна влево и удовлетворять свойству ветвимости право, то строка, соответствующая вершине <tex>v</tex> будет ветвится вправо и влево.
Чтобы найти вершины различные влево, будем нужно хранить левый символ для каждой вершины или информацию о том, что она различна влево. Для поиска строки, ветвящейся влево, нужно промаркировать всё дерево. Сделать это можно при помощи [[Обход в глубину, цвета вершин| обхода в глубину]]. Начиная с корня, будем спускаться спускаясь вниз, для листов будем записывать записываем левый символ суффикса, соответствующего данному листу, для вершины <tex>v</tex> будем запускать запустим проверку:*если среди левых детей <tex>v</tex> есть хотя бы один, удовлетворяющий свойству различности влево, то обозначим обозначаем <tex>v</tex> как различную влево вершину (в суффиксном дереве свойство различности влево передаётся от детей к родителю {{---}} строка соответствующая вершине <tex>v</tex> и строка соответствующая ребёнку <tex>v</tex> начинаются с одного и того же символа),*если среди левых символов детей <tex>v</tex> нет ни одного со свойством различная влево вершина, то проверим проверяем на совпадение левые символы детей:**если все левые символ детей <tex>v</tex> одинаковы и эквивалентны <tex>x</tex>, то запишем записываем в <tex>v</tex> этот символ <tex>x</tex>,**если не все левые символы детей <tex>v</tex> эквивалентны, то запишем записываем в <tex>v</tex>, что она различна влево.
Так как время проверки <tex>v</tex> пропорционально числу детей, время работы всего алгоритма {{---}} <tex>O(n)</tex>.
Анонимный участник

Навигация