例动态规划--最长回文序列问题
Posted duanshuai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了例动态规划--最长回文序列问题相关的知识,希望对你有一定的参考价值。
问题定义:
设计高效算法,求给定输入字符串的最长回文子序列。例如,给定输入character,算法应该返回carac。算法的运行时间是怎样的?
可以将问题中的回文看作前后缀匹配的问题,因此这个问题属于特殊的前缀动态规划的问题
1. 如何用子问题表示
dp[ i ][ j ]表示A[ i…j ]的最长回文序列
则,总问题==dp[ 0 ][ n-1 ]
分析:
如果A[ 0 ] == A[ n-1 ] , dp[ 0 ][ n-1 ] = 2 + dp[ 1 ][ n-2 ]
如果A[ 0 ] == A[ n-1 ], 则A[0]与A[n-1]至少有一个不在最长回文序列中,即:dp[ 0 ][ n-1 ] = max{ dp[ 0 ][ n-2 ] , dp[ 1 ][ n-1 ]}
2. 优化子结构和重叠子问题
3. 递归表达式
4. 时间复杂度分析 Θ(n2)
以上是关于例动态规划--最长回文序列问题的主要内容,如果未能解决你的问题,请参考以下文章
算法 ---- 子序列系列问题题解(子序列编辑距离回文系列问题)
算法 ---- 子序列系列问题题解(子序列编辑距离回文系列问题)