特定の単語が辞書 (英語の単語リスト) にあるかどうかをすばやく確認できる必要があります。メンバーシップをチェックする速度 (要素の追加や削除ではありません) だけに関心があり、メモリの使用は実際には問題ではありません。
もともと私はこのようなセットを使用していました:
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 がどのように物事をハッシュするかについての理解が欠けているのかもしれません - DAWG や Trie ではなく、私が取得しようとしているセット (O(1) メンバーシップ テスト?) はすでに最高ですか? DAWG はメモリを節約しますが、計算は節約しませんか?
どうもありがとう!