我需要一个程序在Haskell计算Levenshtein distance。Haskell程序Levenshtein距离
回答
你需要计算Levenshtein距离(也称为编辑距离),这被定义为跟随字符串a
和b
:(从Wikipedia拍摄):
因为列夫(值我,j)只依赖于以前的值,我们可以利用Haskell的懒惰来初始化一个Array,其中位置(i,j)处的元素值是同一个数组的先前值的函数!请参阅Dynamic programming example以查看如何完成此操作的示例。
这里去一个基本实施lev
:
import Data.Array
lev :: String -> String -> Int
lev x y = c ! (m, n)
where
c = listArray ((0, 0), (m, n)) [compute i j | i <- [0 .. m], j <- [0 .. n]]
compute 0 j = j
compute i 0 = i
compute i j
| x !! (i - 1) == y !! (j - 1) = c ! (i - 1, j - 1)
| otherwise = 1 + (minimum $ map (c !) [(i , j - 1),
(i - 1, j),
(i - 1, j - 1)])
m = length x
n = length y
该代码可以进一步优化,但应该给你上手是一个好主意。
在计算Levenshtein之后,您只需要将其与编辑成本界限k进行比较。
谢谢先生..这有助于。 – user3041551
@ user3041551对不起,你真正需要的是Levenshtein距离而不是LCS。我总是混淆他们两个,我的不好。我编辑了我的答案。 –
谢谢佩德罗罗德里格斯先生,感谢您的帮助。 – user3041551
- 1. Levenshtein距离成本
- 2. 反向Levenshtein距离
- 3. Levenshtein距离组合
- 4. 计算Levenshtein距离
- 5. 任意序列的Levenshtein /编辑距离
- 6. OCR:加权Levenshtein距离
- 7. Levenshtein距离与阵列
- 8. 移植C#Levenshtein距离Java
- 9. Levenshtein编辑距离Python
- 10. Swift3中的Levenshtein距离
- 11. 同义词由Levenshtein距离
- 12. Levenshtein(或者Damerau-Levenshtein,如果可能的话)距离是程序集
- 13. 如何优化Levenshtein距离以检查距离为1?
- 14. Python中的Levenshtein距离只给出1作为编辑距离
- 15. 构建字符串图(Levenshtein距离)
- 16. 非英语语言的Levenshtein距离
- 17. 作为全文替代的Levenshtein距离
- 18. 正则表达式中的Levenshtein距离
- 19. 需要帮助了解Levenshtein距离
- 20. 基于Levenshtein距离的方法Vs Soundex
- 21. 在列表中计算levenshtein距离Python
- 22. Levenshtein与扰乱字符的距离?
- 23. 字符串相似性 - > Levenshtein距离
- 24. 如何在Delphi中实现Levenshtein距离?
- 25. 前缀/后缀替代Levenshtein距离
- 26. 显示Levenshtein距离的结果
- 27. Levenshtein距离C#计数错误类型
- 28. Damerau-Levenshtein距离的迭代版本
- 29. Damerau-Levenshtein距离的高效实现
- 30. R中的快速Levenshtein距离?
这甚至不是问题 –