Manacher のアルゴリズムを理解するのに約 6 ~ 8 時間費やした後、タオルを投げる準備が整いました。しかし、その前に、最後にもう 1 つ、暗がりで説明します。誰か説明してもらえますか? コードは気にしません。誰かにALGORITHMについて説明してもらいたいです。
これは、他の人がアルゴリズムを説明するのを楽しんでいるように見える場所のようです: http://www.leetcode.com/2011/11/longest-palindromic-substring-part-ii.html
「abba」などの文字列を #a#b#b#a# に変換したい理由は理解できます。たとえば、前述の Web サイトの作成者は、アルゴリズムの重要な部分は次のように述べています。
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 ])
P[i'] = 7 で、P[i] が R - i 以下ではない場合、P[i] は 5 に等しいと彼/彼女はある時点で言っているので、これは間違っているようです。
アルゴリズムに慣れていない場合は、次のリンクを参照してください: http://tristan-interview.blogspot.com/2011/11/longest-palindrome-substring-manachers.html用語がひどくて紛らわしいです.まず、定義されていないものがあります.また、変数が多すぎます.どの変数が何を参照しているかを思い出すためのチェックリストが必要です.)
もう 1 つは: http://www.akalin.cx/longest-palindrome-linear-time (頑張ってください)
アルゴリズムの基本的な要点は、線形時間で最長の回文を見つけることです。最小から中程度の労力で O(n^2) で実行できます。このアルゴリズムは、O(n) に到達するために非常に「賢い」はずです。