Algorithm 如何在最长回文算法中选择下一个中心?

Algorithm 如何在最长回文算法中选择下一个中心?,algorithm,palindrome,Algorithm,Palindrome,这是一个关于前一段时间在这里讨论的问题。引文解释了算法,它说:“要选择下一个中心,取当前回文的最长回文正确后缀的中心”。不幸的是,他们没有提供证据,我也不明白为什么下一个中心是当前回文最长回文正确后缀的中心 有人能证明/解释一下吗?所以我们要向右转 说你的“当前”回文是40个大字母。(可能以位置100为中心)你想找一个更大的 (好的,可能有一个更大的,900个字母长,右边是50000个字母——与这个完全无关。这很好。但我们以后会讨论这个问题。现在,我们必须将中心移到右边,同时寻找长度超过40个的

这是一个关于前一段时间在这里讨论的问题。引文解释了算法,它说:“要选择下一个中心,取当前回文的最长回文正确后缀的中心”。不幸的是,他们没有提供证据,我也不明白为什么下一个中心是当前回文最长回文正确后缀的中心


有人能证明/解释一下吗?

所以我们要向右转

说你的“当前”回文是40个大字母。(可能以位置100为中心)你想找一个更大的

(好的,可能有一个更大的,900个字母长,右边是50000个字母——与这个完全无关。这很好。但我们以后会讨论这个问题。现在,我们必须将中心移到右边,同时寻找长度超过40个的回文。有意义吗?)

所以我们必须向右移动,我们可以向前移动一步。但我们希望尽可能地前进,而不错过任何机会

现在,如果右边的下一个要包括这一个……事实上,它必须包括这组40人中最右边的字母。(它不能再靠左边了,因为我们已经检查过了,所以它必须在100后居中,因为它将超过40,所以它必须包括我们的右手字母,#120。)

那么我们还得走多远

好吧,除了回文,你再也回不去了(从120开始)!如果它不是中间的回文,它就不会是回文。< /P> 3331110111

您只能“返回”到0。例如,0左边的1永远不会是回文

就这么简单你必须包括我们最右边的字母(如果我们要包括我们中的任何一个),并且,你希望它尽可能大,它必须是回文,因为回文只能以回文开始(我的意思是“从中间”)

在上面的例子中,左边的1或0,或者说最右边的3,不可能在这个宇宙中以回文为中心,不管我们后来在右边发现了什么。他们周围没有回文,所以他们不可能是回文中心

注意3S中部的3可能有较大的回文。strong>但是
别忘了我们已经检查过了,这是迄今为止最长的回文(基于中心,从左开始),所以这不可能是真的

所以任何比这个长的回文,或者说,比这个长的回文的下一个可能的起点是0

换句话说,它只是我们现在右边最大回文的中心。(因此,不是“111”是一个短回文,而是“1110111”,它是你能看到的最长回文,贴在右边。)

事实上,我们必须检查的两种可能性是(A)最后一个位置的“0”和(B)最后一个位置的“1”。当然,在这两种可能性中,我们必须从左向右,所以(A)“0”确实是下一个要检查的

别忘了这两个(0和1)相当于说“结尾有一个回文1110111,结尾有一个较短的回文111”

当然1110111更长,所以1110111的中心明显位于111中心的左侧

最长的回文粘贴在右边,当然中间离左边最近

所以,希望这能清楚地说明链接博客上讨论的具体部分,你问过的!!!我故意用多种方式重复我自己,希望能有所帮助。今天是荣格算法日:)

请再次注意,我只是想澄清迈克尔所问的非常具体的问题。

该死的困惑,嗯


顺便说一句,我只是忽略了角色中心与角色中心之间的关系,但这与理解您的问题无关。

是的,非常感谢您的回答:)谢谢您的精彩解释。我想我现在明白了:)那么你是说:-1。我们知道当前回文2的中心点。我们知道(当前回文的)最后一个子回文是3。考虑到回文的对称性,我们知道下一个潜在中心在哪里,简言之,找到最后一个子回文,向右移动那么多字符,或者如果没有一个字符,则转到下一个字符