了解Levenshtein距离

时间:2014-05-31 09:01:21

标签: javascript algorithm math levenshtein-distance

我在使用方法Levenshtein distance时遇到了麻烦。它说levenshtein distance is the amount of operations it takes to get from string 1 to string 2。好的,请看下面的代码。

  // Compute the edit distance between the two given strings
function getEditDistance(a, b) {
  if(a.length === 0) return b.length; 
  if(b.length === 0) return a.length; 

  var matrix = [];

  // increment along the first column of each row
  var i;
  for(i = 0; i <= b.length; i++){
    matrix[i] = [i];
  }

  // increment each column in the first row
  var j;
  for(j = 0; j <= a.length; j++){
    matrix[0][j] = j;
  }

  // Fill in the rest of the matrix
  for(i = 1; i <= b.length; i++){
    for(j = 1; j <= a.length; j++){
      if(b.charAt(i-1) == a.charAt(j-1)){
        matrix[i][j] = matrix[i-1][j-1];
      } else {
        matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
                                Math.min(matrix[i][j-1] + 1, // insertion
                                         matrix[i-1][j] + 1)); // deletion
      }
    }
  }

  return matrix[b.length][a.length];
};

此代码使用Javascript。

现在想象我将通过以下2句话。

1. welcome to planet earth.
2. welcome sea.

第一句话比第二句更多。所以现在我需要知道这些之间的区别2.因此,当将参数传递给上述函数时,是否有任何顺序? (比如“将带有更多字母的句子传递给第一个参数。将带有较少字母的句子传递给第二个参数”)。或者没有任何订单?据我所知,没有订单,但今天会议结束后我感到困惑!

更新

基本上,此公式旨在计算“将sentence with less words更改为sentence with more words需要多少操作。我的理解是否正确?

1 个答案:

答案 0 :(得分:3)

  

第一句话比第二句更多。所以现在我需要知道这些之间的区别2.因此,当将参数传递给上述函数时,是否有任何顺序? (比如“将带有更多字母的句子传递给第一个参数。将带有较少字母的句子传递给第二个参数”)。或者没有任何订单?据我所知,没有订单,但今天会议结束后我感到困惑!

您无需保留订单。您可以按照任何顺序传递字符串(句子)。

  

这个公式基本上是为了计算“用更少的单词将更少的单词改为句子需要多少次操作。我的理解是否正确?

是的,你可以这样想。更确切地说,Levenshtein Distance测量两个序列之间的差异。在您的情况下,它将确定需要添加,删除或更改的字符的最小数量,以便将其中一个字符串(其中一个)转换为另一个字符串。