作为我学习quickCheck
的一部分,我想为levenshtein编辑距离实现构建一个测试生成器。我认为显而易见的方法是从两个相等的字符串和一个随机的非可还原系列的插入/删除/ traspose操作开始,将其应用于其中一个字符串并断言levenshtein距离是随机序列的长度。
我很坚持这可以有人帮忙吗?
答案 0 :(得分:9)
获得“不可简化”的权利听起来相当困难。我会尝试找到更多不那么复杂的不变量。以下是一些想法:
x
,如果您只对其应用一项更改,生成y
,x
和y
之间的编辑距离应为1。x
和y
,计算它们之间的距离d
。然后,更改y
,产生y'
,并计算与x
的距离:它应与d
的差异最多为1。n
次修改应用于字符串x
后,已修改字符串与x
之间的距离最多应为n
。请注意,case(1)是这种情况的特例,其中n = 0,因此如果您愿意,可以省略那个简洁。或者,保持它,因为案例(1)可能会产生更简单的反例。x
到y
的编辑距离应与y
到x
的编辑距离相同。如果你有另一个已知良好的算法实现来进行测试,你可以与之进行比较,并断言你总能得到与它相同的答案。
以上所有内容都是在没有任何研究的情况下吸引我的事情。您可以执行更多操作:例如,对lower and upper bounds as defined by wikipedia进行编码。