文本比较算法--Needleman/Wunsch算法

一、定义:

定义:
LCS(A,B)表示字符串A和字符串B的最长公共子串的长度。

很显然,LCS(A,B)=0 表示两个字符串没有公共部分。

例如,字符串A=kitten,字符串B=sitting ,那他们的最长公共子串为ittn ,最长公共子串长度为4。

(注:最长公共子串不需要连续出现,但一定是出现的顺序一致),


二、公式:

为了讲解计算LCS(A,B),特给予以下几个定义:

A=a1a2……aN,表示A是由a1a2……aN这N个字符组成,Len(A)=N;

B=b1b2……bM,表示B是由b1b2……bM这M个字符组成,Len(B)=M.

定义LCS(i,j)=LCS(a1a2……ai,b1b2……bj),其中0≤i≤N,0≤j≤M.

对于1≤i≤N,1≤j≤M,有公式:

若ai=bj,则LCS(i,j)=LCS(i-1,j-1)+1
若ai≠bj,则LCS(i,j)=Max(LCS(i-1,j-1),LCS(i-1,j),LCS(i,j-1))

计算LCS(A,B)的算法有很多,下面介绍的Needleman/Wunsch算法是其中的一种。和LD算法类似,Needleman/Wunsch算法用的都是动态规划的思想。

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值