线性和并行求解多个序列最长公共子序列(MLCS)算法学习笔记
来源:互联网 发布:mac好用的绘图 编辑:程序博客网 时间:2024/06/11 20:57
1. 问题简介
LCS问题:
令
例如:
MLCS问题:
就是找到
2.针对MLCS问题的方法
动态规划
f(n)=⎧⎩⎨0,L[i−1,j−1]+1,max(L[i−1,j],L[i,j−1]),if i or j=0if X[i]=Y[j]if X[i]≠Y[j]
动态规划存在的问题:- 时间复杂度为
(∏di=1ni) ,时空复杂度太高,需要计算矩阵中的所有的值。 - 后来有人对算法进行改进 ,降低了算法的时空复杂度,但都没有降到
线性阶,而且大部分改进算法只适用于LCS问题,并不适用于MLCS问题。
- 时间复杂度为
基于支配点算法寻找MLCS的过程
在动态规划基础上为了减少计算量,提出了匹配点及支配点的概念,提出了基于支配点的MLCS算法。S1={T,G,A,C,G,A,T,C} S2={A,G,T,C,T,C,A,G} S3={C,T,A,G,T,A,C,G} 图1
红色(过支配点)和蓝色(重复点)点都是冗余点
反向搜索寻找MLCS
基于支配点的MLCS算法存在的问题:
1 在MLCS-DAG中存在大量的冗余点,使消除操作Minimal( )耗时较长。
2 大量的非关键点存在,使得在RAM中存储MLCS-DAG困难(数据研究表明,关键点与非关键点比例在1:10-1:100000之间)。
3 对图中所有的路径都要遍历,也额外增加了时间开销。MLCS_NCSG模型
1 消除冗余点(解决问题1)->NCSG构建
2 消除非关键点(解决问题2,3)->前向后向拓扑排序
前向拓扑排序后如图3
后向拓扑排序后如图4
- RCP_MLCS算法
策略一:后继表,对构造图的过程进行优化节省查找后继坐标时间。
策略二:序号代表坐标,节省存储空间。
策略三:最优化计算及中间结果的重复利用。
策略四:子计算与序列化把匹配序列分开成多个子序列进行计算,序列化到磁盘。
策略五:并行计算。
3.总结
了解作者对问题逐步深入思考并提出解决思路的过程,这种对问题的思考、解决、新问题产生、再解决的逐步进阶的学习过程很值得我们借鉴并应用到日常的学习生活中。
阅读全文
1 0
- 线性和并行求解多个序列最长公共子序列(MLCS)算法学习笔记
- 最长公共子序列求解
- 最长公共子序列求解
- 最长公共子序列求解
- 算法学习笔记----最长公共子序列问题
- 算法学习-最长公共子序列
- 最长公共子序列和的 算法
- 算法学习之二——用DP和备忘录算法求解最长公共子序列问题
- Python 动态规划算法求解最长公共子序列
- 最长公共子序列求解算法及代码实现
- 求解最大子序列、最长递增子序列、最长公共子串、最长公共子序列
- 算法学习-动态规划(最长公共子序列)
- 算法学习 - 最长公共子序列(LCS)C++实现
- 算法学习-最长公共子序列(LCS)
- 线性空间求最长公共子序列的Nakatsu算法
- 最长公共子序列算法(LCS)
- LCS算法(最长公共子序列)
- 最长公共子序列(LCS)算法
- Alias.StudioTools.Techniques.Art.To.Part
- Linux命令的基础知识
- SpringSecurity自定义用户认证逻辑(二)
- 用指针交换两个数
- 08-图8 How Long Does It Take
- 线性和并行求解多个序列最长公共子序列(MLCS)算法学习笔记
- ArrayList源码分析
- Matlab使用笔记-uint8类型之间的运算的坑
- 软件需求分析文档模版
- Unity 凸包算法-切线算法
- 屏幕尺寸,分辨率,像素,PPI之间到底什么关系?
- 教你彻底学会动态规划——入门篇
- Gerrit安装配置
- IOS与安卓的区别