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)
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.
for (let i = 0; i <= firstStringLength; i++)
distanceMatrix[0][i] = i;
let i;
for (i = 0; i < firstStringLength + 1; i++)
distMatrix[0][i] = i;
// Fill in column distances.
for (let i = 0; i <= secStringLength; i++)
distanceMatrix[i][0] = i;
for (i = 0; i < secStringLength + 1; i++)
distMatrix[i][0] = i;
// Propogate the values through the matrix, the leading diagonal holds the total difference at any point.
for (let j = 1; j <= secStringLength; j++) {
for (let i = 1; i <= firstStringLength; i++) {
const indicator = firstString[i - 1] === secString[j - 1] ? 0 : 1;
distanceMatrix[j][i] = Math.min(
distanceMatrix[j][i - 1] + 1, // Deletion
distanceMatrix[j - 1][i] + 1, // Insertion
distanceMatrix[j - 1][i - 1] + indicator, // Substitution
for (i = 1; i < secStringLength + 1; i++) {
for (let j = 1; j < firstStringLength + 1; j++) {
const indicator = firstString[j - 1] === secString[i - 1] ? 0 : 1;
distMatrix[i][j] = Math.min(
distMatrix[i][j - 1] + 1, // Deletion
distMatrix[i - 1][j] + 1, // Insertion
distMatrix[i - 1][j - 1] + indicator, // Substitution
);
}
}
return distanceMatrix[secStringLength][firstStringLength];
return distMatrix[secStringLength][firstStringLength];
}
export default levenshteinDistance;