关于delphi:Levenshtein算法-如果编辑距离大于给定阈值,则快速失败

Levenshtein algorithm - fail-fast if edit distance is bigger than a given threshold

对于Levenshtein算法,我已经找到了Delphi的此实现。

我需要一个版本,该版本会在达到最大距离后立即停止,并返回到目前为止的距离。

我的第一个想法是在每次迭代后检查当前结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
for i := 1 to n do
    for j := 1 to m do
    begin
      d[i, j] := Min(Min(d[i-1, j]+1, d[i,j-1]+1), d[i-1,j-1]+Integer(s[i] <> t[j]));

      // check  
      Result := d[n, m];
      if Result > max then
      begin
        Exit;
      end;

    end;


我收集的是查找levenstein距离(如果它小于MAX,对吧?),

如果是这样,达到大于MAX的值是不够的,因为这仅意味着某个路径长于该路径,而不意味着不存在更短的路径。为了确保找不到小于MAX的路径,必须监视直到当前点为止的路径的最小可能长度,即距离表中一列的最小长度。

我不擅长Delphi,但我认为代码应如下所示:

1
2
3
4
5
6
7
8
9
10
11
for i := 1 to n do
begin;
    min := MAX + 1
    for j := 1 to m do
    begin;
      d[i, j] := Min(Min(d[i-1, j]+1, d[i,j-1]+1), d[i-1,j-1]+Integer(s[i] <> t[j]));
      min := Min(min, d[i,j])
    end;
    if min >= MAX then
        Exit;
end;