对于Levenshtein算法,我找到了this implementation for Delphi。
我需要一个版本,一旦达到最大距离就会停止,并返回到目前为止找到的距离。
我的第一个想法是在每次迭代后检查当前结果:
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;
答案 0 :(得分:5)
我收集你想要的是找到levenstein距离,如果它低于MAX
,对吗?
如果是这样,达到大于MAX
的值是不够的,因为它只表示某些路径比这更长,但不是没有更短的路径。为了确保没有找到短于MAX
的路径,必须监视路径的最小可能长度,直到当前点,即距离表中列的最小值。
我不擅长Delphi,但我认为代码应该是这样的:
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;