为什么我们不能通过分而治之解决最长回文子序列?

时间:2013-10-04 04:33:23

标签: algorithm palindrome divide-and-conquer

给定一个数组字符串,找到最长的子回合,即回文。例如,如果给定的字符串是“forgeeksskeegfor”,则输出应为“geeksskeeg”。

问题是动态编程的有效解决方案。

然而,我只是想知道为什么我们不能解决Divide and Conquer的问题,就像我们解决最大子阵列问题一样。 (http://en.wikipedia.org/wiki/Maximum_subarray_problem

我们制定了最大的子阵列问题,以便用D& C:

有效地解决

1)将给定的数组分成两半 2)返回以下三个中的最大值 ... .a)左半部分的最大子阵列总和(进行递归调用) ... .b)右半部分的最大子阵列总和(进行递归调用) ... .c)最大子阵列总和,使子阵列穿过中点

最长的Palindrome子序列问题可以是:

1)将给定的数组分成两半 2)返回以下三个中的最大值 ... .a)左半部分的最大回文总和(进行递归调用) ... .b)右半部分的最大回文总和(进行递归调用) ... .c)最大回文总和,使得子阵列穿过中点

我们可以考虑实施并说解决方案不存在,但是问题结构如何阻止我们考虑D& C解决方案?

1 个答案:

答案 0 :(得分:0)

如果字符串的形式为“13267224”,则分而治之的方法可能会奏效。 这里,6+2+3 = 11 和 7+2+2 = 11 因此,“326722”是最长的回文和子串。但是在字符串的情况下,例如。 “abaccidba”,分而治之是行不通的。