Алгоритм Манакера — различия между версиями
Rthakohov (обсуждение | вклад) |
Rthakohov (обсуждение | вклад) |
||
Строка 8: | Строка 8: | ||
Опишем сначала наивный алгоритм решения задачи. Чтобы посчитать ответ для позиции <tex>i</tex>, будем на каждом шаге увеличивать длину палиндрома с центром в <tex>i</tex> и убеждаться, что рассматриваемая строка не перестала быть палиндромом, либо не произошел выход за границы массива. Очевидно, что такой алгоритм будет работать за <tex>O(n^2)</tex> | Опишем сначала наивный алгоритм решения задачи. Чтобы посчитать ответ для позиции <tex>i</tex>, будем на каждом шаге увеличивать длину палиндрома с центром в <tex>i</tex> и убеждаться, что рассматриваемая строка не перестала быть палиндромом, либо не произошел выход за границы массива. Очевидно, что такой алгоритм будет работать за <tex>O(n^2)</tex> | ||
===Псевдокод=== | ===Псевдокод=== | ||
+ | <font color=green>// <tex>s</tex> {{---}} исходная строка</font> | ||
+ | <font color=green>// <tex>d1, d2</tex> {{---}} массивы для записи ответа</font> | ||
+ | '''function''' <tex>\mathtt{calculate}():</tex> | ||
+ | '''for''' <tex>i \in 1...|s|</tex> |
Версия 11:22, 10 марта 2016
Задача: |
Пусть дана строка | . Требуется найти - длина наибольшего палиндрома нечетной длины с центром в позиции и - аналогично для палиндромов четной длины для всех от 1 до .
Наивный алгоритм
Идея
Опишем сначала наивный алгоритм решения задачи. Чтобы посчитать ответ для позиции
, будем на каждом шаге увеличивать длину палиндрома с центром в и убеждаться, что рассматриваемая строка не перестала быть палиндромом, либо не произошел выход за границы массива. Очевидно, что такой алгоритм будет работать заПсевдокод
//— исходная строка // — массивы для записи ответа function for