【发布时间】:2011-10-01 20:40:14
【问题描述】:
我正在尝试从一个庞大的单词列表中读入,并以一种允许我以后快速检索的方式存储它们。我首先想到的是使用 trie,但我承认我的实现很幼稚,它基本上是嵌套的哈希表,每个键都是不同的字母。现在,在 trie 中插入一个单词需要很长时间(运行这个程序需要 20 多秒),我想知道是否有人对我可以做些什么来改进我的插入有任何想法?这不是家庭作业。
import string
import time
class Trie:
def __init__(self):
self.root = TrieNode()
def insert_word(self, word):
current_node = self.root
for letter in word:
trie_node = current_node.get_node(letter)
current_node = trie_node
class TrieNode:
def __init__(self):
self.data = {}
def get_node(self, letter):
if letter in self.data:
return self.data[letter]
else:
new_trie_node = TrieNode()
self.data[letter] = new_trie_node
return new_trie_node
def main():
start_time = time.time()
trie = Trie()
with open('/usr/share/dict/words', 'r') as dictionary:
word_list = dictionary.read()
word_list = word_list.split("\n")
for word in word_list:
trie.insert_word(word.lower())
print time.time() - start_time, "seconds"
if __name__ == "__main__":
main()
【问题讨论】:
-
我认为
addWord应该是insert_word? -
啊,是的,很抱歉。不知道怎么没有改变:\
-
你的单词列表有多大?
-
如您所见,它从 /usr/share/dict/words 获取文件。我放了一个 len(word_list) ,它有 234937 个(我认为是独一无二的?)字
标签: python optimization data-structures trie