You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.0 KiB
52 lines
1.0 KiB
/*
|
|
Copyright (c) 2006. All Rights reserved.
|
|
|
|
If you use this script, please email me and let me know, thanks!
|
|
Andrew Hedges
|
|
andrew (at) hedges (dot) name
|
|
If you want to hire me to write JavaScript for you, see my resume.
|
|
|
|
http://andrew.hedges.name/resume/
|
|
*/
|
|
|
|
// return the smallest of the three values passed in
|
|
function minimum (x, y, z)
|
|
{
|
|
if (x < y && x < z) return x;
|
|
if (y < x && y < z) return y;
|
|
return z;
|
|
}
|
|
|
|
// calculate the Levenshtein distance between a and b,
|
|
function levenshtein (a, b)
|
|
{
|
|
var cost;
|
|
var m = a.length;
|
|
var n = b.length;
|
|
|
|
// make sure a.length >= b.length to use O(min(n,m)) space
|
|
if (m < n)
|
|
{
|
|
var c=a; a=b; b=c;
|
|
var o=m; m=n; n=o;
|
|
}
|
|
|
|
var r = new Array();
|
|
r[0] = new Array();
|
|
for (var c = 0; c < n+1; c++)
|
|
r[0][c] = c;
|
|
|
|
for (var i = 1; i < m+1; i++)
|
|
{
|
|
r[i] = new Array();
|
|
r[i][0] = i;
|
|
|
|
for (var j = 1; j < n+1; j++)
|
|
{
|
|
cost = (a.charAt(i-1) == b.charAt(j-1))? 0: 1;
|
|
r[i][j] = minimum (r[i-1][j]+1, r[i][j-1]+1, r[i-1][j-1]+cost);
|
|
}
|
|
}
|
|
|
|
return r[r.length-1][r[r.length-1].length-1];
|
|
}
|