用于搜索单词是否在一组单词中的高效数据结构和/或算法?

时间:2014-04-26 01:09:11

标签: python algorithm hash

假设我有一组单词。对于任何给定的单词,我想知道它是否已经在集合中。什么是一些有效的数据结构和/或算法来实现它?

  1. 例如,以下方式使用哈希表是一种好方法吗?

    • 首先使用一些哈希函数和哈希表来存储单词集。

    • 给定一个查询词,计算其哈希值并查看它是否在哈希表中。

  2. 在Python中,是否已有一些数据结构和/或算法 哪个可以用来实现你推荐的方式?
  3. 谢谢!

4 个答案:

答案 0 :(得分:2)

mywords = set(["this", "is", "a", "test"])

"test" in mywords       # => True
"snorkle" in mywords    # => False

答案 1 :(得分:2)

Python有一套。例如:

>>> foo = set()
>>> foo.add('word')
>>> 'word' in foo
True
>>> 'bar' in foo
False

答案 2 :(得分:2)

是的,python有一个使用HashTable实现的本机字典数据结构,因此in运算符在字典上的O(1)时间内执行。 Per Allen Downey在Think Python

  

in运算符对列表和词典使用不同的算法。   对于列表,它使用搜索算法,如第8.6节所述。作为清单   时间越长,搜索时间就越长。对于   字典,Python使用一种称为哈希表的算法   可重新标记的属性:in运算符占用大约相同的数量   时间,无论字典中有多少项目。

答案 3 :(得分:2)

或者,如果您在一段时间内构建了大量单词,并且单词不长,请考虑使用trie。

http://en.wikipedia.org/wiki/Trie

https://pypi.python.org/pypi/PyTrie