编辑距离实现源码(Levenstein距离)

来源:互联网 发布:win10开机速度优化 编辑:程序博客网 时间:2024/06/14 01:31

采用通用的动态规划算法,时间复杂度O(m*n),空间复杂度O(n)。

代码清单

public float getDistance(String target, String other)
 {
  int n = target.length();
  int m = other.length();

  if (n == 0 || m == 0)
  {
   return n == m ? 1 : 0;
  }

  char[] sa = target.toCharArray();
  int d[] = new int[n + 1];
  int p[] = new int[n + 1];
  int _d[];

  for (int i = 0; i <= n; i++)
  {
   p[i] = i;
  }

  char t_j;// jth character of target
  int cost = 0;// cost
  for (int j = 1; j <= m; j++)
  {
   t_j = other.charAt(j - 1);
   d[0] = j;

   for (int i = 1; i <= n; i++)
   {
    cost = sa[i - 1] == t_j ? 0 : 1;
    d[i] = Math.min(Math.min(d[i - 1] + 1, p[i] + 1), p[i - 1] + cost);
   }
   _d = p;
   p = d;
   d = _d;
  }

  return 1.0f - (float) p[n] / Math.max(m, n);
 }

原创粉丝点击