<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=46.17.201.77&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=46.17.201.77&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/46.17.201.77"/>
		<updated>2026-05-01T02:37:25Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D0%BF%D0%B0%D0%BB%D0%B8%D0%BD%D0%B4%D1%80%D0%BE%D0%BC%D0%BE%D0%B2&amp;diff=60739</id>
		<title>Дерево палиндромов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D0%BF%D0%B0%D0%BB%D0%B8%D0%BD%D0%B4%D1%80%D0%BE%D0%BC%D0%BE%D0%B2&amp;diff=60739"/>
				<updated>2017-05-09T11:44:14Z</updated>
		
		<summary type="html">&lt;p&gt;46.17.201.77: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Дерево палиндромов''' (англ. ''palindromic tree'') {{---}} структура данных, позволяющая решить некоторые интересные задачи на палиндромы. &lt;br /&gt;
&lt;br /&gt;
Эту структуру данных придумал Михаил Рубинчик&amp;lt;ref name=&amp;quot;ref1&amp;quot;&amp;gt;[http://codeforces.com/profile/MikhailRubinchik Codeforces {{---}} MikhailRubinchik]&amp;lt;/ref&amp;gt; и рассказал её на летних сборах в Петрозаводске в 2014 году. Наиболее подробное о дереве палиндромов или овердреве (palindromic tree, eertreee) можно прочитать в диссертации Михаил Рубинчика [http://www.pdmi.ras.ru/pdmi/dissertatiton/2016-05-25t000000-%D1%80%D1%83%D0%B1%D0%B8%D0%BD%D1%87%D0%B8%D0%BA-%D0%BC%D0%B8%D1%85%D0%B0%D0%B8%D0%BB-%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%B8%D0%BD%D0%BE%D0%B2%D0%B8%D1%87]&lt;br /&gt;
&lt;br /&gt;
== Описание структуры ==&lt;br /&gt;
[[Дерево,_эквивалентные_определения|Дерево]] палиндромов состоит из вершин, каждая из которых соответствует палиндрому. Все вершины соответствуют разным палиндромам. Через &amp;lt;tex&amp;gt;u'&amp;lt;/tex&amp;gt; будем обозначать строку, которой соответствует вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;.&lt;br /&gt;
[[Основные_определения_теории_графов#def_graph_edge_1|Рёбра]] дерева палиндромов ориентированные и помечены символами. Ребро с символом &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; ведет из вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; в вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;v'=xu'x&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:palindrome_tree_nodes.png|Пример четырех вершин дерева палиндромов|border]] [[Файл:palindrome_tree_edge.png|В данном примере мы получаем палиндром aba добавлением символа a к обоим сторонам палиндрома b|border]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Стоит обратить внимание на то, что название структуры данных выбрано не совсем удачно. На самом деле структура представляет из себя два дерева {{---}} одно для палиндромов чётной длины, другое для палиндромов нечётной длины. Обозначим корни этих деревьев за &amp;lt;tex&amp;gt;root_{even}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;root_{odd}&amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
Помимо вершин и рёбер в дереве палиндромов также присутствуют ''суффиксные ссылки''. Для каждой вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; её суффиксная ссылка ведет в такую вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;w'&amp;lt;/tex&amp;gt; является наибольшим суффиксом строки &amp;lt;tex&amp;gt;u'&amp;lt;/tex&amp;gt; относительно других вершин. При этом важно понимать, что суффиксная ссылка из вершины одного дерева может вести как в то же, так и в другое дерево.&lt;br /&gt;
&lt;br /&gt;
[[Файл:palindrome_tree_suffix_link.png|Мы добавили суффиксную ссылку (пунктирная линия) из aba к a потому, что a является наибольшим паллиндромом-суффиксом строки aba|border]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При реализации в целях экономии памяти мы не будем хранить для каждой вершины соответствующую ей строку-палиндром. Этот подход был бы неэффективным с точки зрения памяти. Вместо этого мы будем хранить только длину палиндрома (и для некоторых задач позицию палиндрома в строке).&lt;br /&gt;
&lt;br /&gt;
Итак, структура будет состоять из двух деревьев и, соответственно, двух корней. Для удобства реализации каждый корень будет соответствовать фиктивной строке.&lt;br /&gt;
* &amp;lt;tex&amp;gt;root_{odd}&amp;lt;/tex&amp;gt; будет соответствовать палиндрому длины &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;. Это нужно для того, чтобы не обрабатывать отдельно случай добавления палиндрома длины &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Теперь каждый раз при добавлении ребра из вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; к вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, мы будем просто считать что &amp;lt;tex&amp;gt;|v'|=|u'| + 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* &amp;lt;tex&amp;gt;root_{even}&amp;lt;/tex&amp;gt; будет соответствовать фиктивному палиндрому длины &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Суффиксные ссылки обоих корней будут вести к вершине &amp;lt;tex&amp;gt;root_{odd}&amp;lt;/tex&amp;gt;. Это соглашение нужно также для удобства реализации {{---}} теперь каждая вершина имеет суффиксную ссылку.&lt;br /&gt;
&lt;br /&gt;
== Построение ==&lt;br /&gt;
Опишем далее по шагам процесс построения дерева палиндромов для данной строки. Изначально оно состоит из двух фиктивных вершин, а далее будет достраиваться инкрементально после каждого рассмотренного символа строки.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background-color:#CCC;margin:0.5px&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 |style=&amp;quot;background-color:#FFF;padding:2px 30px&amp;quot;|Будем обрабатывать строку символ за символом. Пусть мы уже обработали некоторый префикс &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и теперь хотим добавить следующий символ строки, назовем его &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |style=&amp;quot;background-color:#FFF;padding:2px 30px&amp;quot;|[[Файл:palindrome_tree_build1.png|500px]]&lt;br /&gt;
 |-&lt;br /&gt;
 |style=&amp;quot;background-color:#FFF;padding:2px 30px&amp;quot;|Будем также поддерживать максимальный палиндром-суффикс обработанного префикса &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Назовем его &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 |style=&amp;quot;background-color:#FFF;padding:2px 30px&amp;quot;|[[Файл:palindromic_tree_nodes.png|500px]]&lt;br /&gt;
 |-&lt;br /&gt;
 |style=&amp;quot;background-color:#FFF;padding:2px 30px&amp;quot;|Т.к. &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; находится в уже обработанной части строки, то ему соответствует какая-то вершина в дереве. У этой вершины есть суффиксная ссылка на какую-то другую вершину, у которой тоже есть суффиксная ссылка и т.д.&lt;br /&gt;
 |style=&amp;quot;background-color:#FFF;padding:2px 30px&amp;quot;|[[Файл:palindrome_tree_build3.png|500px|Цепочка суффиксных ссылок из t]]&lt;br /&gt;
 |-&lt;br /&gt;
 |style=&amp;quot;background-color:#FFF;padding:2px 30px&amp;quot;|Найдем теперь палиндром-суффикс строки &amp;lt;tex&amp;gt;px&amp;lt;/tex&amp;gt; (т.е. нового префикса). Искомая строка будет иметь вид &amp;lt;tex&amp;gt;xAx&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; {{---}} какая-то строка, возможно пустая (или фиктивная строка длины &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, соответствующая корню &amp;lt;tex&amp;gt;root_{odd}&amp;lt;/tex&amp;gt;, если искомый палиндром-суффикс {{---}} это просто символ &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;). &lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt;xAx&amp;lt;/tex&amp;gt; {{---}} палиндром, то &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; {{---}} тоже палиндром, и, более того, это суффикс строки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Поэтому он может быть достигнут из &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; по суффиксным ссылкам.&lt;br /&gt;
 |style=&amp;quot;background-color:#FFF;padding:2px 30px&amp;quot;|[[Файл:palindrome_tree_build4.png|500px]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|author=1&lt;br /&gt;
|statement=&lt;br /&gt;
Строка &amp;lt;tex&amp;gt;xAx&amp;lt;/tex&amp;gt; {{---}} это единственная подстрока-палиндром строки &amp;lt;tex&amp;gt;px&amp;lt;/tex&amp;gt;, которой, возможно, нет в &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; (т.е. все другие подстроки-палиндромы есть). &lt;br /&gt;
|proof= &lt;br /&gt;
Заметим, что все новые подстроки-палиндромы, которых не было в &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, должны оканчиваться на символ &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, и поэтому должны быть палиндромом-суффиксом строки &amp;lt;tex&amp;gt;px&amp;lt;/tex&amp;gt;. Из-за того, что &amp;lt;tex&amp;gt;xAx&amp;lt;/tex&amp;gt; {{---}} наибольший палиндром-суффикс строки &amp;lt;tex&amp;gt;px&amp;lt;/tex&amp;gt;, все остальные меньшие палиндромы-суффиксы этой строки уже есть в каком-то префиксе строки &amp;lt;tex&amp;gt;xAx&amp;lt;/tex&amp;gt; (т.к. для каждого суффикса палиндрома есть равный ему префикс) и, соответственно, уже есть в &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Таким образом, чтобы обработать очередной символ &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, нужно просто спуститься по суффиксным ссылкам вершины &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; до тех пор, пока мы не найдем подходящую строку &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; (причем мы всегда можем найти такую строку, возможно длины &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt;, если очередная суффиксная ссылка будет вести в корень). Затем нужно проверить, есть ли уже ребро по символу &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; из вершины, соответствующей &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, и если нет, добавить это ребро в новую вершину &amp;lt;tex&amp;gt;xAx&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно добавить суффиксную ссылку из вершины &amp;lt;tex&amp;gt;xAx&amp;lt;/tex&amp;gt;. Если эта вершина уже существовала до добавления символа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, ничего делать не нужно {{---}} суффиксная ссылка итак указывает на правильную вершину. Иначе нужно найти наибольший палиндром-суффикс строки &amp;lt;tex&amp;gt;xAx&amp;lt;/tex&amp;gt;, который будет иметь вид &amp;lt;tex&amp;gt;xBx&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} это некоторая строка, возможно, пустая. Следуя той же логике, которую мы использовали раньше, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} это палиндром-суффикс строки &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и может быть достигнут из &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; по суффиксным ссылкам.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|author=2&lt;br /&gt;
|statement=&lt;br /&gt;
Очередная добавленная вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; не может быть максимальным палиндромом-суффиксом какой-либо ранее добавленной вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Предположим, что это не так. Тогда оказывается, что не все подпалиндромы строки &amp;lt;tex&amp;gt;v'&amp;lt;/tex&amp;gt; были добавлены в дерево палиндромов ранее. А это противоречит утверждению 1.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Таким образом, добавление очередного символа по описанному алгоритму происходит корректно.&lt;br /&gt;
&lt;br /&gt;
== Оценка сложности ==&lt;br /&gt;
&lt;br /&gt;
=== Память ===&lt;br /&gt;
Каждая вершина в дереве соответствует подпалиндрому, всего различных подпалиндромов в строке не более &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; (т.к. при добавлении очередного символа появляется не более одного нового палиндрома). &lt;br /&gt;
Поэтому дерево палиндромов занимает &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
=== Время ===&lt;br /&gt;
Чтобы оценить временную сложность алгоритма, нужно заметить, что по мере того, как мы обрабатываем строку символ за символом, левая граница наибольшего палиндрома-суффикса уже обработанной строки сдвигается только вправо. Очевидно, эта граница может двигаться вправо не более &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} длина строки, для которой мы строим дерево. То же самое относится и к левой границе той строки, на которую ведет суффиксная ссылка вновь добавленной вершины.&lt;br /&gt;
&lt;br /&gt;
Таким образом, суммарное время работы построения алгоритма &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Применения ==&lt;br /&gt;
=== Число новых палиндромов, порождаемых очередным символом ===&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо определить число подпалиндромов, которые будут новыми после добавления символа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в конец строки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Например, при добавлении символа &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; к строке &amp;lt;tex&amp;gt;aba&amp;lt;/tex&amp;gt;, которая уже состоит из палиндромов &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;aba&amp;lt;/tex&amp;gt;, добавляется новый палиндром &amp;lt;tex&amp;gt;aa&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Мы знаем, что число новых подпалиндромов при добавлении символа &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Так что решение задачи довольно простое {{---}} будем строить дерево палиндромов символ за символом и для каждого нового символа отвечать, был ли добавлен новый палиндром или нет (определить это можно, например, по тому, были ли добавлены новые вершины к структуре).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Также данную структуру можно использовать для подсчета числа различных подпалиндромов строки. Это будет просто число вершин.&lt;br /&gt;
&lt;br /&gt;
=== Число подпалиндромов ===&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Требуется определить число подпалиндромов, которые содержатся в данной строке.}}&lt;br /&gt;
&lt;br /&gt;
Например, строка &amp;lt;tex&amp;gt;aba&amp;lt;/tex&amp;gt; имеет четыре подпалиндрома: дважды &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;aba&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для решения задачи будем строить дерево палиндромов для данной строки и на каждом шаге добавлять к ответу все палиндромы, которые содержат этот новый символ. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим очередной шаг алгоритма после добавления символа &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Обозначим за &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; вершину, соответствующую максимальному палиндрому-суффиксу, содержащую этот последний символ. &lt;br /&gt;
Заметим, что новые палиндромы, которые добавляет &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; {{---}} это &amp;lt;tex&amp;gt;t'&amp;lt;/tex&amp;gt;, а также все палиндромы, достижимые из &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; по суффиксным ссылкам (т.к. только они содержат новый символ &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;). Для того чтобы быстро найти их число, будем хранить в каждой вершине длину цепочки суффиксных ссылок до корня (включая саму вершину), а затем будем просто прибавлять к ответу это число для каждого очередного &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; по мере добавления новых символов. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Эта задача также может быть решена [[Алгоритм_Манакера|алгоритмом Манакера]] за ту же асимптотику, однако данный алгоритм не может быть расширен для более широкого класса задач, в отличие от дерева палиндромов.&lt;br /&gt;
&lt;br /&gt;
=== Число вхождений каждого подпалиндрома в строку ===&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Необходимо найти число вхождений каждого подпалиндрома строки в неё саму.}}&lt;br /&gt;
&lt;br /&gt;
Чтобы решить эту задачу деревом палиндромов, нужно обратить внимание на то, что при добавлении нового символа увеличивается количество вхождений наибольшего палиндрома-суффикса &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, содержащего новый символ, и всех палиндромов, достижимых из &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; по суффиксным ссылкам.&lt;br /&gt;
&lt;br /&gt;
Для каждой вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; дерева палиндромов будем хранить число вхождений строки &amp;lt;tex&amp;gt;u'&amp;lt;/tex&amp;gt; в исходную строку (не обязательно актуальные данные) и число, которое необходимо добавить к числу вхождений всех потомков &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Назовем такую операцию добавления ''операцией релаксации''. После того, как релаксация будет выполнена для всех предков вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, можно будет считать, что посчитанное число вхождений соответствует действительности. &lt;br /&gt;
&lt;br /&gt;
Данный метод очень похож на метод, описанный в статье [[Несогласованные_поддеревья._Реализация_массового_обновления|про реализацию массовых обновлений в деревьях отрезков]].&lt;br /&gt;
&lt;br /&gt;
=== Поиск рефрен-палиндрома ===&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Для данной строки необходимо найти палиндром, произведение длины которого на количество вхождений в строку является максимальным.}}&lt;br /&gt;
&lt;br /&gt;
Для решения данной задачи применим тот же алгоритм, что и в прошлой задаче, а затем пройдем по всем вершинам дерева палиндромов и выберем подходящую.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Алгоритм Манакера]]&lt;br /&gt;
* [[Сжатое суффиксное дерево]]&lt;br /&gt;
* [[Суффиксный массив]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://adilet.org/blog/25-09-14/ Adilet.org {{---}} Palindromic tree, Adilet ADJA Zhaxybay]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Структуры данных]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Деревья поиска]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Основные определения. Простые комбинаторные свойства слов]]&lt;/div&gt;</summary>
		<author><name>46.17.201.77</name></author>	</entry>

	</feed>