zoukankan      html  css  js  c++  java
  • 算法作业9-1——最长公共子序列问题

    1. 

    给定序列

    X=<x1,x2,...,xm>

    Y=<y1,y2,...,yn>

    X Y 的最长公共子序列Z

    2. 解析

    Xi=<x1,x2,...,xi>

    Yj=<y1,y2,...,yj>

    Zk=<z1,z2,...,zk>

    如果ZkXiYj的最长公共子序列

    1xi=yj,那么zk=xi=yjZk-1xi-1Yj-1的最长公共子序列

    2xi<>yjzk<>xi那么ZkXi-1Yj的最长公共子序列

    3xi<>yjzk<>yj那么ZkXiYj-1的最长公共子序列

    递推关系

    C[i,j]表示是XiYj的最长公共子序列(Zk)长度

    iX长度;jY的长度

     

    实例:

     

    3. 设计

    算法1:给出最长子串长度

     

    For i=1 to m

    For j=1 to n

     

    算法2f(B,i,j)输出最长子串

    If i=0 or j=0

    then return 空串;

    If B[i,j]=←

    then 输出xi,且删除xi,删除yj

    Else if B[i,j]=↑

    then return f(B,i-1,j) //删除xi

    Else

    return f(B,i,j-1) //删除yj

    4. 分析

    T=O(mn),

    mX序列长度,nY序列长度

    5. 源码

    https://github.com/2579081436/algorithm.github.io

  • 相关阅读:
    自闭的D7
    D2
    Codeforces Round #531 (Div. 3)
    hello 2019 D
    牛客练习赛36B
    cf954H
    gym102007 E
    Gym 101972
    Gym 101810
    试题 历届试题 青蛙跳杯子(bfs)
  • 原文地址:https://www.cnblogs.com/-happy-/p/14799447.html
Copyright © 2011-2022 走看看