在计算Levenshtein距离时,如何轻松地显示字符串索引顺序对于相同长度的字符串不重要?

时间:2016-03-23 01:31:25

标签: string algorithm levenshtein-distance

在处理我的Levenshtein距离实现时,我偶然发现了我的索引被交换的事实,如此伪代码所示(注意s1[j] == s2[i]而不是s1[i] == s2[j])。

L(i, j) = min(L(i - 1, j) + 1,
              L(i, j - 1) + 1,
              L(i - 1, j - 1) + (s1[j] == s2[i] ? 0 : 1))

但是因为我的实现将矩阵计算为矩形子矩阵序列,所以它似乎根本不会影响计算,并且无论索引是否被交换,总是产生正确的结果。 (或者为了简单起见,只需将字符串视为具有相同的长度。)

现在我的问题是,我如何证明(不一定以正式的方式)索引顺序对于相等长度的字符串并不重要?似乎因为这是唯一的影响矩阵的地方,因为它最终是对称的,交换索引只会转移矩阵,但我不确定我是否错过了重要的东西。

1 个答案:

答案 0 :(得分:0)

正如您所指出的,这只有在两个字符串长度相等的情况下才有效。

但是在下面的图像中给出了一个更正式的levenshtein定义,实际上指的是字符串内容的唯一内容是函数r(x, y)。其余的只涉及琴弦的长度,在这种情况下是相同的。因此,使用s1[j] == s2[i]代替s1[i] == s2[j]的效果与交换两个输入参数s1s2相同。

Levenshtein

注意:MSD =最小距离总和