mirror of
https://github.com/gchq/CyberChef.git
synced 2025-05-11 16:51:31 -04:00
Adjustments made to the Levenshtein function
This commit is contained in:
parent
378c1ba07b
commit
34725e0052
1 changed files with 14 additions and 13 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue