- 0
- 0
- 约3.78千字
- 约 4页
- 2021-03-06 发布于福建
- 举报
最长公共上升子序列( LCIS)的 O(n^2)算法预备知识:
动态规划的基本思想, LCS,LIS。
问题:
字符串 a,字符串 b,求 a 和 b 的 LCIS(最长公共上升子序列)。
首先我们可以看到,这个问题具有相当多的重叠子问题。于是我们想到用
DP 搞。 DP 的首要任务是什么?定义状态。
1 定义状态 F[i][j]表示以 a 串的前 i 个字符 b 串的前 j 个字符且以 b[j] 为结尾
构成的 LCIS的长度。
为什么是这个而不是其他的状态定义?最重要的原因是我只会这个,还有
一个原因是我知道这个定义能搞到平方的算法。而我这只会这个的原因是,这
个状态定义实在是太好用了。这一点我后面再说。
我们来考察一下这个状态。思考这个状态能转移到哪些状态似乎有些棘
手,如果把思路逆转一下,考察这个状态的最优值依赖于哪些状态,就容易许
多了。这个状态依赖于哪些状态呢?
首先,在 a[i]!=b[j] 的时候有 F[i][j]=F[i-1][j] 。为什么呢?因为 F[i][j] 是以 b[j] 为
结尾的 LCIS,如果 F[i][j]0 那么就说明 a[1]..a[i] 中必然有一个字符
原创力文档

文档评论(0)