You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现带自定义操作权重的编辑距离算法问题求助

问题核心原因

你修改了编辑操作的权重,但没有对应修改动态规划表的边界初始化逻辑:

  • 基础莱文斯坦距离默认所有操作权重为1,因此当i==0(空字符串转换为长度为j的字符串需要j次插入)时直接赋值j,当j==0(长度为i的字符串转换为空字符串需要i次删除)时直接赋值i。
  • 你现在将插入、删除权重调整为20,因此边界值需要同步更新为j*20和i*20,否则边界值还是权重为1的计算结果,和后续有权重的操作计算叠加后自然会出现非5倍数的错误结果。

修正后的代码

str1 = "algorithms"
str2 = "alligator"
m = len(str1)
n = len(str2)

def editdistance(str1, str2, m, n):
    table = [[0 for _ in range(n+1)] for _ in range(m+1)]
  
    for i in range(m+1):
        for j in range(n+1):
            if i == 0:
                # 空串转长度为j的串需要j次插入,每次权重20
                table[i][j] = j * 20
            elif j == 0:
                # 长度为i的串转空串需要i次删除,每次权重20
                table[i][j] = i * 20
            elif str1[i-1] == str2[j-1]:
                table[i][j] = table[i-1][j-1]
            else:
                table[i][j] = min(
                    20 + table[i][j-1], # 插入操作
                    20 + table[i-1][j], # 删除操作
                    5 + table[i-1][j-1] # 替换操作
                )
    return table[m][n]

print(editdistance(str1, str2, m, n)) 

结果验证

修正后代码运行输出为125,符合你预期的5的倍数要求:所有操作权重、边界初始值都是5的倍数,因此动态规划表中所有状态值都是5的倍数,最终结果自然也为5的倍数。

内容的提问来源于stack exchange,提问作者Michael C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:39:02