改进版LCS
来源:互联网 发布:720全景平台源码 编辑:程序博客网 时间:2024/05/29 18:34
改进LCS:
用k表示最长公共子串允许的最长间隔。
如(‘我喜欢周杰伦歌’,’我最喜欢的是周杰伦唱的歌哈’,)
如果k = 2: 匹配出 ‘我喜欢‘ or ’周杰伦’ ,因为‘欢的是周’ 中‘欢’与‘周’字间隔为3,超过k值。
如果k = 3: 匹配出 ‘我喜欢周杰伦歌’ 。
修改过的动态规划方法:
用str1,str2分别表示需要匹配的串。用state[i][j]表示以str1[i],str[j]结尾的最长公共子串。
优化子结构: 要求整个序列的LCS,可以分解成所有子串间的LCS,取个最大值。所有子问题构建问题的解。
重叠子问题:
要求
state[i][j] ,如果str1[i]==str[j],这时候只要得到里i,j距离为k内的state的最大值,因为是满足固定距离的,所以新的state[i][j] 为上述最大值加一。只需要求 str1[i’],str2[j’]结尾的
state[i′][j′] 的最大值,i′∈[i−k,i−1],j′∈[j−k,j−1] , 重复求解了state[i′][j′] ,子问题具有重复性。状态转移方程:
if str1[i] == str[j]:
state[i][j]=max(state[i′][j′])+1,i′∈[i−k,i−1],j′∈[j−k,j−1]
if str1[i] != str[j]:
state[i][j]=0 最后返回state中的最大值。
- 时间复杂度
O(k2n2) ,空间复杂度O(n2)
阅读全文
0 0
- 改进版LCS
- LCS 算法的改进
- ICPCCamp2017 Day 4 B Dissertation(LCS 动态规划--改进版 )
- java版LCS算法
- LCS
- LCS
- lcs
- LCS
- LCS
- LCS
- LCS
- LCS
- LCS
- LCS
- lcs
- LCS
- LCS
- lcs
- Markdown中数学公式整理
- server certificate does NOT include an ID which matches the server name问题解决
- MyBatis插入并获取主键
- [待完成,不要看]Android自定义组合View
- ffmpeg基础知识和命令集
- 改进版LCS
- [待完成,不要看]Android Studio 加速gradle编译速度
- springMVC的@RequestParam注解和@PathVariable注解的区别
- XGboost调参
- 键位对应的数字以及倒序排列
- 【JavaScript】在循环内使用闭包
- maven+ssm
- Java基础知识总结
- JS原始数据类型-String