Изменения

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

Дерево палиндромов

36 байт добавлено, 22:48, 6 июня 2016
Применения
== Применения ==
=== Число новых палиндромов, порождаемых очередным символом ===
В данной задаче нужно уметь {{Задача|definition=Уметь отвечать на вопрос <tex>``</tex>как много новых палиндромов-подстрок появится у строки <tex>s</tex>, если к ней в конец добавить символ <tex>x"</tex>.}} 
Например, при добавлении символа <tex>a</tex> к строке <tex>aba</tex>, которая уже состоит из палиндромов <tex>a</tex>, <tex>b</tex> и <tex>aba</tex>, добавляется новый палиндром <tex>aa</tex>.
=== Число подпалиндромов ===
В данной задаче нужно уметь {{Задача|definition=Уметь отвечать на вопрос <tex>``</tex> как много подпалиндромов имеет данная строка <tex>"</tex>. }} Например, строка <tex>aba</tex> имеет четыре подпалиндрома: дважды <tex>a</tex>, <tex>b</tex> и <tex>aba</tex>.
Для решения задачи построим дерево палиндромов для данной строки. При обработке очередного символа добавим к ответу все палиндромы, которые содержат этот новый символ. Заметим, что эти палиндромы {{---}} это новый максимальный палиндром-суффикс <tex>t</tex>, который содержит новый символ, и все полиндромы, достижимые из <tex>t</tex> по суффиксным ссылкам. Для того чтобы быстро найти их количество будем хранить в каждой вершине дерева палиндромов длину цепочки суффиксных ссылок (включая саму вершину), а затем будем просто прибавлять к ответу это число для каждого <tex>t</tex> по мере добавления новых символов.
=== Число вхождений каждого подпалиндрома в строку ===
В этой задаче необходимо {{Задача|definition=Необходимо найти число вхождений каждого подпалиндрома строкив нее саму.}}
Чтобы решить эту задачу деревом палиндромов, нужно обратить внимание на то, что при добавлении нового символа увеличивается количество вхождений наибольшего палиндрома-суффикса <tex>t</tex>, содержащего новый символ, и всех палиндромов, достижимых из <tex>t</tex> по суффиксным ссылкам.
=== Поиск рефрен-палиндрома ===
{{Задача|definition=Для данной строки необходимо найти палиндром, произведение длины которого на количество вхождений в строку является максимальным.}}
Для решения данной задачи применим тот же алгоритм, что и в прошлой задаче, затем пройдем по всем вершинам дерева палиндромов и выберем подходящую.
165
правок

Навигация