最长公共子序列问题(LCS)

本文介绍了最长公共子序列(LCS)问题,通过动态规划的基本原理,详细阐述了问题描述、分析和算法实现。以字符串"xyxxzxyzxy"和"zxzyyzxxyxxz"为例,得出LCS的长度为6,最长子序列为"xyxxxz",并通过矩阵分析展示了如何获取最长公共子序列的字符。
摘要由CSDN通过智能技术生成

动态规划的基本原理:

在字母表上,分别给出两个长度为n和m的字符串A和B,这里A= … 的子序列是一个形式为 … 的字符串,其中每个 都在1和n之间。
例如 ={x,y,z},A=zxyxyz,B=xyyzx那么xyy同时是A和B的长度是3的子序列。然而。它不是A和B的最长的公共子序列,因为字符串xyyx也是A和B的公共的子序列。因此A和B的最长公共子序列的长度是4。

最后得到结论:

如果i和j都大于0,那么
  • 若 = , L[i,j]=L[i-1,j-1]+1;
  • 若 != , L[I,j]=max{L[i-1,],L[I,j-1]}

问题描述及实验内容

假设A=”xyxxzxyzxy”和B=”zxzyyzxxyxxz”,求出A和B的最长公共子序列的长度并输出其中一个最长公共子序列。
最后求得L[n,m]=6和最长子序列为xyxxxz

问题分析和算法描述

LCS的算法表示:
输入:字母表上的两个字符串A和B,长度分别为n和m.
输出:A和B的最长公共子序列的长度和其中一个最长子序列。

      for i=1 to n
      L[i,0]=0
             end for
       for j=0 to m
       L[0,j]=0
       end for
       for i=1 to n
           for j=1 to m
               if =  then  L[i,j]=L[i-1,j-1]+1
            else L[I,j]=max{L[i-1,],L[I,j-1]}
            end if
        end for
    end for
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值