4
對於Levenshtein算法,我找到了this implementation for Delphi。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;
這是沒有好。你分配給'd [i,j]',然後測試'd [n,m]'。另外,'ord()'會比'Integer()'更普通,但我更喜歡顯式使用'IfThen()'。如果n或m小於1,結果將不會被分配。 – 2012-07-31 08:16:40
我看到,Min的使用使得在兩個循環結束前難以優化。 – mjn 2012-07-31 09:45:24