Algoritmo de Manacher (algoritmo para encontrar la subcadena de palíndromos más larga en tiempo lineal)

Después de pasar unas 6-8 horas tratando de digerir el algoritmo de Manacher, estoy listo para tirar la toalla. Pero antes de hacerlo, aquí hay un último disparo en la oscuridad: ¿Alguien puede explicarlo? No me importa el código. Quiero que alguien explique laALGORITMO.

Aquí parece ser un lugar que otros parecían disfrutar al explicar el algoritmo:http://www.leetcode.com/2011/11/longest-palindromic-substring-part-ii.html

Entiendo por qué querría transformar la cadena, por ejemplo, 'abba' a # a # b # b # a # Después de que estoy perdido. Por ejemplo, el autor del sitio web mencionado anteriormente dice que la parte clave del algoritmo es:

<code>                      if P[ i' ] ≤ R – i,
                      then P[ i ] ← P[ i' ]
                      else P[ i ] ≥ P[ i' ]. (Which we have to expand past 
                      the right edge (R) to find P[ i ])
</code>

Esto parece incorrecto, porque él / ella dice en un punto que P [i] es igual a 5 cuando P [i '] = 7 y P [i] no es menor o igual que R - i.

Si no está familiarizado con el algoritmo, aquí hay algunos enlaces más:http://tristan-interview.blogspot.com/2011/11/longest-palindrome-substring-manachers.html (He intentado este, pero la terminología es horrible y confusa. Primero, algunas cosas no están definidas. También, demasiadas variables. Necesita una lista de verificación para recordar qué variable se refiere a qué).

Otro es:http://www.akalin.cx/longest-palindrome-linear-time (buena suerte)

La esencia básica del algoritmo es encontrar el palíndromo más largo en tiempo lineal. Se puede hacer en O (n ^ 2) con un esfuerzo de mínimo a medio. Se supone que este algoritmo es bastante "inteligente" para bajarlo a O (n).

Respuestas a la pregunta(8)

Su respuesta a la pregunta