例如,从英语单词集开始,是否有一种结构/算法允许使用快速检索字符串(如“light”和“tight”)的字符串单词“正确”作为查询?也就是说,我想检索与查询字符串具有较小Levenshtein距离的字符串。用于检索靠近Levenshtein距离的字符串的数据结构
6
A
回答
0
我在想最快的方法是预先构建一个可以在O(1)时间索引和访问的相似性缓存。诀窍是找到添加到缓存的常见拼写错误,这可能会相当大。
我想象谷歌会用各种各样的统计查询搜索数据做类似的事情。
1
由于对长度为n和m的琴弦计算Levenshtein距离为O(nm)
,计算所有Levenshtein距离L(querystring, otherstring)
的幼稚方法非常昂贵。
但是,如果您将Levenshtein算法可视化,则它基本上会填充具有编辑距离的n * m表格。但对于以相同的几个字母(前缀)开头的单词,Levenshtein表的前几行将是相同的。 (固定查询字符串,当然。)
这建议使用trie (also called prefix tree):读取查询字符串,然后建立一个Levenshtein行的树。之后,您可以轻松遍历它来查找接近查询字符串的字符串。
(这不意味着你必须建立一个新的查询字符串的新线索。我不认为这是对全对距离的同样耐人寻味的结构。)
我想我最近看到一篇关于这个的文章,它有一个很好的python实现。如果我能找到它,会添加一个链接。 编辑:Here it is, on Steve Hanov's blog.
4
这里的BK-tree数据结构可能是适当的。它旨在有效地支持“查询单词中编辑距离小于等于k的所有单词都是什么”格式的查询?它的性能保证相当不错,而且实现起来并不困难。
希望这会有所帮助!
相关问题
- 1. 构建字符串图(Levenshtein距离)
- 2. 字符串相似性 - > Levenshtein距离
- 3. Levenshtein与扰乱字符的距离?
- 4. 如何preg匹配PHP中的levenshtein距离的字符串
- 5. Levenshtein距离和特殊字符
- 6. 字符串索引的数据结构?
- 7. 计算Levenshtein许多连续字符串之间的距离
- 8. Levenshtein短语的距离/字符串匹配算法
- 9. 非英文字符串上的Levenshtein距离
- 10. Levenshtein只有部分字符串的距离(Java)
- 11. 计算两个字符串之间的levenshtein距离
- 12. 显示Levenshtein距离的结果
- 13. 用于搜索字符串的更快数据结构
- 14. 基于Levenshtein距离的方法Vs Soundex
- 15. 使用Levenshtein距离确定数组中是否存在相似的字符串
- 16. Levenshtein距离成本
- 17. 反向Levenshtein距离
- 18. Levenshtein距离组合
- 19. 计算Levenshtein距离
- 20. Swift3中的Levenshtein距离
- 21. 字符串比较而不是Levenshtein距离(我认为)
- 22. Java流,并以字符串Levenshtein距离过滤
- 23. Numpy - 使用numpy.from函数构造Jaro(或Levenshtein)距离的矩阵
- 24. Levenshtein带分隔符的多字符单位编辑距离
- 25. 如何优化Levenshtein距离以检查距离为1?
- 26. 我可以使用ActiveRecord查找基于最近匹配(levenshtein距离)的行
- 27. Python:如何找到使levenshtein距离的字符的位置
- 28. 搜索汉明距离小于阈值的字符串
- 29. 如何找到靠近我家的近距离maven仓库
- 30. Haskell程序Levenshtein距离
好的方法,如果这实际上是拼写错误,不是非常有用,如果它是更多的理论应用Levenshtein距离。 – us2012 2013-02-13 02:19:04
你的意思是什么?如果这是我想象的内存使用会使它不切实际。 – MaiaVictor 2013-02-13 02:22:26
@ us2012这是目的。 – MaiaVictor 2013-02-13 02:27:21