码迷,mamicode.com
首页 > 其他好文 > 详细

【例】动态规划--最长回文序列问题

时间:2020-06-20 13:47:23      阅读:44      评论:0      收藏:0      [点我收藏+]

标签:mamicode   hellip   运行时间   一个   htm   eset   http   cte   class   

问题定义:

设计高效算法,求给定输入字符串的最长回文子序列。例如,给定输入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)

 

【例】动态规划--最长回文序列问题

标签:mamicode   hellip   运行时间   一个   htm   eset   http   cte   class   

原文地址:https://www.cnblogs.com/duanshuai/p/13168196.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!