Adjustments made to the Levenshtein function

This commit is contained in:
n1073645 2020-01-22 09:52:08 +00:00
parent 378c1ba07b
commit 34725e0052

View file

@ -24,29 +24,30 @@ export function levenshteinDistance(firstString, secString) {
if (!secStringLength) if (!secStringLength)
return firstStringLength; return firstStringLength;
const distanceMatrix = Array(secStringLength + 1).fill(0).map(() => Array(firstStringLength + 1).fill(0)); const distMatrix = Array(secStringLength + 1).fill(0).map(() => Array(firstStringLength + 1).fill(0));
// Fill in first row distances. // Fill in first row distances.
for (let i = 0; i <= firstStringLength; i++) let i;
distanceMatrix[0][i] = i; for (i = 0; i < firstStringLength + 1; i++)
distMatrix[0][i] = i;
// Fill in column distances. // Fill in column distances.
for (let i = 0; i <= secStringLength; i++) for (i = 0; i < secStringLength + 1; i++)
distanceMatrix[i][0] = i; distMatrix[i][0] = i;
// Propogate the values through the matrix, the leading diagonal holds the total difference at any point. // Propogate the values through the matrix, the leading diagonal holds the total difference at any point.
for (let j = 1; j <= secStringLength; j++) { for (i = 1; i < secStringLength + 1; i++) {
for (let i = 1; i <= firstStringLength; i++) { for (let j = 1; j < firstStringLength + 1; j++) {
const indicator = firstString[i - 1] === secString[j - 1] ? 0 : 1; const indicator = firstString[j - 1] === secString[i - 1] ? 0 : 1;
distanceMatrix[j][i] = Math.min( distMatrix[i][j] = Math.min(
distanceMatrix[j][i - 1] + 1, // Deletion distMatrix[i][j - 1] + 1, // Deletion
distanceMatrix[j - 1][i] + 1, // Insertion distMatrix[i - 1][j] + 1, // Insertion
distanceMatrix[j - 1][i - 1] + indicator, // Substitution distMatrix[i - 1][j - 1] + indicator, // Substitution
); );
} }
} }
return distanceMatrix[secStringLength][firstStringLength]; return distMatrix[secStringLength][firstStringLength];
} }
export default levenshteinDistance; export default levenshteinDistance;