我需要能够快速检查给定的单词是否在我的字典(英语单词表)中。我只关心检查成员的速度(不添加或删除元素),内存使用并不是真正的问题。
最初我使用的是这样的集合:
words = set(x.strip().lower() for x in open("/usr/share/dict/words").readlines())
if(word in words):
...
我的程序大约花了。在测试输入上运行 4 秒。然后,我尝试通过使用 DAWG ( http://pypi.python.org/pypi/pyDAWG ) 来优化事物,而不是通过预先计算 DAWG 并对其进行酸洗:
words = pickle.load(open('wordlistDAWG.pyd'))
if(words.word2index(word) is not None):
...
在相同的测试输入上,程序运行了大约 40 秒(包括几秒钟来加载我不关心的 DAWG)。我希望使用 DAWG 能让事情运行得更快!
也许我错过了一些关于 python 如何散列事物的理解 - 一个集合已经是我将获得的最好的(O(1)成员资格测试?)而不是 DAWG 或 Trie?DAWG 会只节省内存而不是计算吗?
非常感谢!