Algorithm 关于Levenshtein距离的问题

Algorithm 关于Levenshtein距离的问题,algorithm,levenshtein-distance,Algorithm,Levenshtein Distance,1) 为什么我们要在这些行中添加1 d[i-1, j] + 1, // deletion d[i, j-1] + 1, // insertion 线路 if s[i] = t[j] then cost := 0 else cost := 1 应该考虑删除/较低的字长,还是我遗漏了什么 2) 此外,注释状态为删除和插入。我认为这是在检查两个单词中删除的字符(整数j/I表示单词的长度),因为较低的值表示删除的字符 这里使用的代码(因为它是伪代码,我没有特定

1) 为什么我们要在这些行中添加1

    d[i-1, j] + 1, // deletion 
    d[i, j-1] + 1, // insertion 
线路

if s[i] = t[j] then cost := 0

        else cost := 1 
应该考虑删除/较低的字长,还是我遗漏了什么

2) 此外,注释状态为删除和插入。我认为这是在检查两个单词中删除的字符(整数j/I表示单词的长度),因为较低的值表示删除的字符

这里使用的代码(因为它是伪代码,我没有特定于语言的问题,该线程不属于任何语言类别):

1)这些行计算删除情况下的距离,插入情况下的距离,以及替换情况下使用“成本”的距离

删除和插入在距离计算中有效地算作“1”,因此为+1

我们可以相信,只有当字符不同时才有替换,因此,如果两个字符相等,则“成本=0”

新的距离是这3个假设之间的最小距离,所以你不必总是加1

2) 如果我计算“FooBar”和“FoBaWhatever”之间的距离,即使第二个字符串比第一个字符串长,我也会删除一些字符

当然,如果第二个字符串比第二个短(FooBar->FoBa),我会找到一些删除项,但无法事先知道它们在哪里…

1)这些行计算删除时的距离,插入时的距离,以及替换时使用“成本”的距离

删除和插入在距离计算中有效地算作“1”,因此为+1

我们可以相信,只有当字符不同时才有替换,因此,如果两个字符相等,则“成本=0”

新的距离是这3个假设之间的最小距离,所以你不必总是加1

2) 如果我计算“FooBar”和“FoBaWhatever”之间的距离,即使第二个字符串比第一个字符串长,我也会删除一些字符

当然,如果第二个字符串比第二个字符串短(FooBar->FoBa),我会找到一些删除项,但无法事先知道它们在哪里…

你读过了吗

您正在计算将一个字符串转换为另一个字符串所需的转换成本——插入和删除的数量

转换的“成本”表示两个字符串之间的距离

交换呢?这就是不同的算法。包括交换并不能改善很多事情

其实质是在这两个单词之间创建一个矩阵,并逐列计算从每个单词的每个字母到另一个单词的每个字母的“距离”。该矩阵的右下角是总距离,考虑到所有字母

问题1)

“上面”的单元格反映了更改的历史,并且该行的字符(通常)与此不同,因此此单元格是相对于它的删除

单元格“left”反映了更改的历史,该列的字符(通常)与此不同,因此此单元格是相对于它的插入

唯一一次这通常是错误的是单词的三个字母序列。在英语中很少见

行-列比较的成本为0或1

“历史加一次变更”和变更实际成本的最小值为适用成本

问题2)

变量
i
j
不是任何长度。它们是比较矩阵中的位置。“插入”和“删除”是将一个单词转换为另一个单词所需的操作。插入/删除操作的计数是单词之间的距离。

您读过吗

您正在计算将一个字符串转换为另一个字符串所需的转换成本——插入和删除的数量

转换的“成本”表示两个字符串之间的距离

交换呢?这就是不同的算法。包括交换并不能改善很多事情

其实质是在这两个单词之间创建一个矩阵,并逐列计算从每个单词的每个字母到另一个单词的每个字母的“距离”。该矩阵的右下角是总距离,考虑到所有字母

问题1)

“上面”的单元格反映了更改的历史,并且该行的字符(通常)与此不同,因此此单元格是相对于它的删除

单元格“left”反映了更改的历史,该列的字符(通常)与此不同,因此此单元格是相对于它的插入

唯一一次这通常是错误的是单词的三个字母序列。在英语中很少见

行-列比较的成本为0或1

“历史加一次变更”和变更实际成本的最小值为适用成本

问题2)


变量
i
j
不是任何长度。它们是比较矩阵中的位置。“插入”和“删除”是将一个单词转换为另一个单词所需的操作。插入/删除操作的计数是单词之间的距离。

是的,我确实读过这个链接。回答得好。然而,最后一件事:在最小函数中,一个单元格有+1,一个单元格有+cost。当然,1和cost是相同的值(1),因为cost从不大于1,也不是0,因为这将导致if语句执行(if cost==0等)。我不明白这个逻辑?不,成本并不总是1。如果相邻的字母不是很好的匹配,它可以比一大很多。第一次开始时,假设n个字符单词的最后一个字母是n次插入的结果;它的成本最初是n,直到您的比较显示它会因为某些角色的行为而减少