【发布时间】:2016-05-03 01:50:58
【问题描述】:
作为我了解 quickCheck 的一部分,我想为 levenshtein 编辑距离实现构建一个测试生成器。我认为显而易见的方法是从两个相等的字符串和一系列随机的不可约的插入/删除/转置动作开始,将其应用于其中一个字符串并断言 levenshtein 距离是随机序列的长度。
我对此很困惑,有人可以帮忙吗?
【问题讨论】:
标签: haskell quickcheck
作为我了解 quickCheck 的一部分,我想为 levenshtein 编辑距离实现构建一个测试生成器。我认为显而易见的方法是从两个相等的字符串和一系列随机的不可约的插入/删除/转置动作开始,将其应用于其中一个字符串并断言 levenshtein 距离是随机序列的长度。
我对此很困惑,有人可以帮忙吗?
【问题讨论】:
标签: haskell quickcheck
获得“不可约”的权利听起来很难。我会尝试找到更多不那么复杂的不变量。以下是一些想法:
x,如果您只对其应用一个更改,生成y,则x 和y 之间的编辑距离应为1。x 和y,计算它们之间的距离d。然后,更改y,得到y',并计算它与x 的距离:它应该与d 相差最多1。x 应用n 编辑后,编辑后的字符串与x 之间的距离最多应为n。请注意,情况 (1) 是这种情况的一种特殊情况,其中 n=0,因此如果您愿意,可以省略该情况以求简洁。或者,保留它,因为案例 (1) 可能会产生更简单的反例。x到y的编辑距离应该和y到x的编辑距离一样。如果您有另一个已知良好的算法实现来测试,您可以与它进行比较,并断言您总是得到与它相同的答案。
以上都是没有任何研究就吸引我的东西。你可以做更多:例如,编码lower and upper bounds as defined by wikipedia。
【讨论】: