gpt4 book ai didi

javascript - 修改 Levenshtein 距离函数以计算两组 x-y 坐标之间的距离?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:42 25 4
gpt4 key购买 nike

我一直在尝试修改 Levenshtein Distance 函数,以便它可以找到两条线之间的距离,或 x-y 坐标集(换句话说,线的相似或不同程度,而不是它们的几何距离) .我遇到了一些问题。我了解如何使用上面的值来获取删除成本,以及使用左侧的值来获取添加成本,但是在替换过程中我尝试使用欧氏距离,但它对我不起作用。

如果您能指出我做错了什么,那就太棒了。

这是javascript中的相关代码:

padlock.dtw = {
_deletionCost: 1,
_insertionCost: 1,
levenshtein: function(a,b){
var l1 = a.length, l2 = b.length;
if (Math.min(l1, l2) === 0) {
return Math.max(l1, l2);
}
var i = 0, j = 0, d = [];
for (i = 0 ; i <= l1 ; i++) {
d[i] = [];
d[i][0] = i;
}
for (j = 0 ; j <= l2 ; j++) {
d[0][j] = j;
}
for (i = 1 ; i <= l1 ; i++) {
for (j = 1 ; j <= l2 ; j++) {
d[i][j] = Math.min(
d[i - 1][j] + this._deletionCost, /* deletion */
d[i][j - 1] + this._insertionCost, /* addition */
d[i - 1][j - 1] + (a[i - 1] === b[j - 1] ? 0 : this.euclideanDistance(a[i-1], b[j-1])) /* substitution, use euchlidean distance as cost */
);
}
}
this._debugPrintMatrix(d);
return d[l1][l2];
},
euclideanDistance: function(a, b){
var xd = a[0]-b[0];
var yd = a[1]-b[1];
return Math.abs(Math.sqrt(Math.pow(xd, 2) + Math.pow(yd, 2)));
},
_debugPrintMatrix: function(m){
for(var i=0;i<m.length;i++){
console.log.apply(this, m[i]);
}
}
}

示例输出:

>>> padlock.dtw.levenshtein( [ [1,1], [0,9], [3,3], [4,4] ], [ [1,1], [2,2], [3,3], [4,4] ] )

Distance Matrix:
0 1 2 3 4
1 0 1 2 3
2 1 2 3 4
3 2 2.414213562373095 2 3
4 3 3.414213562373095 3 2

Final Distance: 2

最佳答案

如果我没有正确理解你的问题,那么你应该完全删除计算两点之间欧氏距离的代码!

首先,让我重申一下您的问题:

你有两组点,例如

A = [ [1,1], [0,9], [3,3], [4,4] ]
B = [ [1,1], [2,2], [3,3], [4,4] ]

您尝试计算这两个集合之间的编辑距离。你用“点”代替“字母”。

到目前为止,这是有道理的。只需将 levenshtein 算法中的“字母”替换为点即可!

但是你犯了一个错误:原始的 Levenshtein 算法不计算两个字母之间的距离,例如距离(a,b)=1 或距离(a,d)=3。

你试图用这样的东西来扩展算法(使用 euclideanDistance() 函数)。但是 levenshtein 算法并不适用于此类事情。如果您仔细观察它,您会发现它不起作用(矩阵中的值具有意义,并且每次循环迭代都使用在前一次迭代中计算的矩阵中的值)。

编辑距离是编辑距离,不是几何距离。您试图更改它,以便它计算编辑距离和几何距离的组合。恕我直言,这种混合毫无意义,毫无用处而且是错误的。

结论

要计算两组 x-y 坐标的 levenshtein 距离,您应该将 euclidianDistance() 替换为简单的相等比较 (a[0]==b[0] && a [1]==b[1]).

然后 levenshtein 算法会给你一个“编辑距离”。

关于javascript - 修改 Levenshtein 距离函数以计算两组 x-y 坐标之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2082945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com