Levenshtein算法 - 快速失败的,如果编辑距离大于给定的阈值大(Levenshtein a

2019-09-20 11:59发布

对于Levenshtein算法我发现德尔福此实现 。

我需要它尽快的最大距离被击中停止一个版本,并返回迄今为止发现的距离。

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

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;

Answer 1:

我猜你想要的是找到编辑距离,如果低于MAX ,对不对?

如果是这样,达到了一个值大于MAX是不够的,因为它仅仅意味着一些路径比较长,但并不表明不存在较短的路径。 以确保没有路径短于MAX可以发现,一个具有监视路径的最小可能长度,直到当前点,即,在超过最小的距离表中的列。

我不擅长德尔福,但我认为代码应该是这个样子:

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;


文章来源: Levenshtein algorithm - fail-fast if edit distance is bigger than a given threshold