How do you implement Levenshtein distance in Delphi?

前端 未结 1 719
一个人的身影
一个人的身影 2020-12-08 05:15

I\'m posting this in the spirit of answering your own questions.

The question I had was: How can I implement the Levenshtein algorithm for calculating edit-distance

相关标签:
1条回答
  • 2020-12-08 05:56
    function EditDistance(s, t: string): integer;
    var
      d : array of array of integer;
      i,j,cost : integer;
    begin
      {
      Compute the edit-distance between two strings.
      Algorithm and description may be found at either of these two links:
      http://en.wikipedia.org/wiki/Levenshtein_distance
      http://www.google.com/search?q=Levenshtein+distance
      }
    
      //initialize our cost array
      SetLength(d,Length(s)+1);
      for i := Low(d) to High(d) do begin
        SetLength(d[i],Length(t)+1);
      end;
    
      for i := Low(d) to High(d) do begin
        d[i,0] := i;
        for j := Low(d[i]) to High(d[i]) do begin
          d[0,j] := j;
        end;
      end;
    
      //store our costs in a 2-d grid  
      for i := Low(d)+1 to High(d) do begin
        for j := Low(d[i])+1 to High(d[i]) do begin
          if s[i] = t[j] then begin
            cost := 0;
          end
          else begin
            cost := 1;
          end;
    
          //to use "Min", add "Math" to your uses clause!
          d[i,j] := Min(Min(
                     d[i-1,j]+1,      //deletion
                     d[i,j-1]+1),     //insertion
                     d[i-1,j-1]+cost  //substitution
                     );
        end;  //for j
      end;  //for i
    
      //now that we've stored the costs, return the final one
      Result := d[Length(s),Length(t)];
    
      //dynamic arrays are reference counted.
      //no need to deallocate them
    end;
    
    0 讨论(0)
提交回复
热议问题