Javascript 查找编辑距离未返回正确值

标签 javascript recursion levenshtein-distance edit-distance

我正在研究一个计算两个字符串的编辑距离的函数,但根据这个唯一的计算器,我得到了一个不正确的值。我得到 19,计算器返回 7。我不确定我的程序有什么问题,我是根据算法设计手册编写的。

var recFindEditDistance = function(P, T, i, j) {
    if (i === undefined || j === undefined) return recFindEditDistance(P, T, P.length - 1, T.length - 1);
    if (i === 0 && j === 0) return 0;
    if (i === 0) return j;
    if (j === 0) return i;

    var sub = recFindEditDistance(P, T, i-1, j-1) + (P[i]===T[j] ? 0 : 1);
    var del = recFindEditDistance(P, T, i, j-1) + 1;
    var add = recFindEditDistance(P, T, i-1, j) + 1;

    return Math.max(sub, add, del);
};

console.log(recFindEditDistance('ffadsfsadfasf', 'asdfasdf'));

最佳答案

Levenshtein 距离算法在每个位置都试图达到到达下一个位置的最小距离。

Wikipedia recurrence relation

与此同时,您正在尝试获得最大的 :)

简单的改变

return Math.max(sub, add, del);

return Math.min(sub, add, del);

它会起作用:)

演示:

function recFindEditDistance(P, T, i, j) {
    if (i === undefined || j === undefined) return recFindEditDistance(P, T, P.length - 1, T.length - 1);
    if (i === 0 && j === 0) return 0;
    if (i === 0) return j;
    if (j === 0) return i;

    var sub = recFindEditDistance(P, T, i-1, j-1) + (P[i]===T[j] ? 0 : 1);
    var del = recFindEditDistance(P, T, i, j-1) + 1;
    var add = recFindEditDistance(P, T, i-1, j) + 1;

    return Math.min(sub, add, del);
};

document.body.innerText = recFindEditDistance('ffadsfsadfasf', 'asdfasdf');

关于Javascript 查找编辑距离未返回正确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33863462/

相关文章:

algorithm - Levenshtein Automata 和 Damerau-Levenshtein 距离算法有什么区别?

python - 带有真实 "Full Text Search"和拼写错误的 SQLite(FTS+spellfix 一起)

javascript - 为什么显示此消息?

javascript - 从 Canvas 中删除饼图并替换为另一个饼图

java - 递归循环

algorithm - 使用优化的 Levenshtein 算法寻找最近的邻居

javascript - 如何获得真实的 IFRAME 加载高度/宽度以及所有渲染图片的自然尺寸

javascript - javascript 中用于限制 HTML 实体的正则表达式,例如 <

javascript - 列出 OneDrive 目录内容而不递归到子目录

Java 递归。以下程序的输出