经典算法 | 字符串最小编辑距离分析与证明

来源:互联网 发布:幽灵行动4画面优化 编辑:程序博客网 时间:2024/05/22 18:56

所谓的求字符串的编辑距离就是给你两个字符串A和B,每次对A进行下列三个操作之一:

1)       改变一个字符

2)       删除一个字符

3)       增加一个字符

将A变成B所需要的最小步骤数就是AB之间的编辑距离。

1如何使用笔算出AB之间的编辑距离

首先分析AB的长度,对其中较短的字符串进行加0填充,使填充之后的字符串长度相等,并且保证填充后的字符串之间每一位尽可能的相等,比如A是aabbcc,B为aawbbwccw,那么A填充之后变成A^:aa0bb0cc0,需要注意的是,0并不是一个字符,只是表示一个占位,

这时可以得到A和B 的编辑距离,将A^和B一一对应,不相等的位数的个数就是A到B所需要的最短编辑距离,同时也是B变成A的最短编辑距离,这里为3

2AB之间的编辑距离计算编程思路

1)       AB最后一位相等

设A长度为i位,B长度为j位,d(i,j)为A,B之间的编辑距离,当A[i]==B[j]的时候,对其中较短的一个字符串进行加0填充,这里假设是A,填充后为A^,那么在填充之后B[j]所对应的字符有两种情况,其一是B[j]对应A[i],那么这里很明显,d(i,j)==d(i-1,j-1)成立,当B[j]对应0的时候,这是可以在不改变编辑距离的情况下对A^进行更改,将A^的最后一个0与前一个与B[j]相等的字符交换位置,这个时候A^和B之间的不同位数不会改变,编辑距离也就不会改变,这个时候d(i,j)==d(i-1,j-1)成立

2)       AB最后一位不等

当AB最后一位不等的时候,A^和B最后一位有两种情况,情况一:0和一个字符,这个假设A^最后为0,那么最后一步为插入字符,那么d(i,j)=d(i,j-1)+1,情况二:当A^和B最后一位为两个不同字符的时候,那么最后一步为更改字符,d(i,j)=d(i-1,j-1)+1,

3)       递推公式

综上所述,能很容易的得到AB之间编辑距离的递推公式,

d(i,j)=min{d(i-1,j-1)+@(A[i],B[j]),d(i-1,j)+1,d(i,j-1)+1}

@(A[i],B[j])的值当A[i]==B[j]时为0,当A[i]!=B[j]时为1

原创粉丝点击