我正在编写一个查询引擎来搜索一个非常大的排序索引文件。所以这是我的计划,使用二进制搜索扫描和Levenshtein distance单词比较进行匹配。有更好或更快的方式吗?感谢。
答案 0 :(得分:1)
您可能希望查看Tries,在许多情况下,它们比二进制搜索更快。
答案 1 :(得分:1)
如果您正在搜索确切的单词,我会建议一个大的哈希表,它会在一次查找中为您提供结果。
由于你正在查看类似的单词,也许你可以通过像soundex这样的东西将单词分组到很多文件中,为你提供更短的单词列表来计算距离。 http://en.wikipedia.org/wiki/Soundex
答案 2 :(得分:1)
在你的鞋子里,我不会重新发明轮子 - 相反,我会找到适当版本的Berkeley DB(现在由Oracle拥有,但仍然是开源的,就像它拥有它一样由加州大学伯克利分校开发,后来由Sleepycat拥有和开发; - )。
本机接口是C和Java(实际上还没有尝试过后者),但是Python接口也相当不错(实际上现在它已经不再是Python的标准库了,因为它可以更好地跟上游开发;-),C ++当然不是问题等等 - 我很确定你可以使用大多数语言。
并且,您可以选择“BTree”(实际上更像是B*Tree
)和哈希(以及其他在您的情况下没有帮助的方法) - 使用实际数据进行基准测试,顺便说一句,你可能会对性能和存储成本感到惊讶(
如果你需要在你的索引问题上抛出多台机器(因为它对于单个机器来说太大而且太重),分布式哈希表是一个好主意 - 原始机器是Chord但是有现在很多其他人(不幸的是我的第一手经验目前仅限于专有经验,所以我不能在这里建议你。)
答案 3 :(得分:1)
对David's answer发表评论后,我要说你需要两个不同的索引:
或者,只需使用Xapian,Lucene或任何其他此类库。有几种被广泛使用和优化。
编辑:我对单词比较算法了解不多,但我猜大多数都与散列不兼容。在这种情况下,R / B树或Trie可能是最佳方式。