线性和并行求解多个序列最长公共子序列(MLCS)算法学习笔记

来源:互联网 发布:mac好用的绘图 编辑:程序博客网 时间:2024/06/11 20:57

1. 问题简介

LCS问题:

X=x1x2...xnY=y1y2...ym,其中X和Y为长度为n和m的序列,最长公共子序列(LCS)问题就是在序列X和Y上找出最长的公共子序列。
例如:X={a,b,c,b,d,a,b}Y={b,d,c,a,b,a}则序列{b,c,a}XY的一个公共子序列,但它不是X和Y的最长公共子序列。序列{b,c,b,a}是最长公共子序列。注意,子序列不是位置连续的,而是相对先后顺序一致。

MLCS问题:

就是找到d(d3)个长度为n或者不为n的序列的最长公共子序列。注意,给定d个字母序列,通常存在多于一个的MLCS。


2.针对MLCS问题的方法

  1. 动态规划

    f(n)=0,L[i1,j1]+1,max(L[i1,j],L[i,j1]),if i or j=0if X[i]=Y[j]if X[i]Y[j]

    动态规划存在的问题:

    • 时间复杂度为(di=1ni),时空复杂度太高,需要计算矩阵中的所有的值。
    • 后来有人对算法进行改进 ,降低了算法的时空复杂度,但都没有降到
      线性阶,而且大部分改进算法只适用于LCS问题,并不适用于MLCS问题。
  2. 基于支配点算法寻找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 对图中所有的路径都要遍历,也额外增加了时间开销。

  3. MLCS_NCSG模型
    1 消除冗余点(解决问题1)->NCSG构建
    2 消除非关键点(解决问题2,3)->前向后向拓扑排序

这里写图片描述

2

前向拓扑排序后如图3

这里写图片描述

3

后向拓扑排序后如图4

这里写图片描述

4

  1. RCP_MLCS算法
    策略一:后继表,对构造图的过程进行优化节省查找后继坐标时间。
    策略二:序号代表坐标,节省存储空间。
    策略三:最优化计算及中间结果的重复利用。
    策略四:子计算与序列化把匹配序列分开成多个子序列进行计算,序列化到磁盘。
    策略五:并行计算。

3.总结

了解作者对问题逐步深入思考并提出解决思路的过程,这种对问题的思考、解决、新问题产生、再解决的逐步进阶的学习过程很值得我们借鉴并应用到日常的学习生活中。