我希望计算包含最多6个值的序列之间的Levenshtein距离。这些值的顺序不应影响距离。
我该如何将其实现到迭代或递归算法中?
示例:
# Currently
>>> LDistance('dog', 'god')
2
# Sorted
>>> LDistance('dgo', 'dgo')
0
# Proposed
>>> newLDistance('dog', 'god')
0
'dog'和'god'是由完全相同的字母组成的,将字符串排序后会得到期望的结果。但是这种方法并不总是适用:
# Currently
>>> LDistance('doge', 'gold')
3
# Sorted
>>> LDistance('dego', 'dglo')
2
# Proposed
>>> newLDistance('doge', 'gold')
1
“doge”和“gold”有3/4个匹配字母,因此应该返回距离为1。这是我当前的递归代码:
def mLD(s, t):
memo = {}
def ld(s, t):
if not s: return len(t)
if not t: return len(s)
if s[0] == t[0]: return ld(s[1:], t[1:])
if (s, t) not in memo:
l1 = ld(s, t[1:])
l2 = ld(s[1:], t)
l3 = ld(s[1:], t[1:])
memo[(s,t)] = 1 + min(l1, l2, l3)
return memo[(s,t)]
return ld(s, t)
编辑:跟进问题:如何在Levenshtein距离算法中添加例外