使用字典而不是排序,然后搜索

时间:2016-04-28 08:57:54

标签: python algorithm sorting dictionary

我正在研究哈希表,并想到了一个想法:

为什么不使用字典搜索元素而不是先对列表进行排序然后进行二分查找? (假设我想多次搜索)

  1. 我们可以在O(n)(我认为)时间将列表转换为字典,因为我们必须遍历所有元素。
  2. 我们将所有这些元素添加到字典中,这需要O(1)时间
  3. 当字典准备就绪后,我们可以在O(1)时间内搜索任何元素(平均值),O(n)是最差的情况
  4. 现在,如果我们谈论平均情况O(n)比其他排序算法更好,因为他们最好采用O(nlogn)。如果我对所说的所有内容都是对的,那么为什么不这样做呢? ?

    我知道你可以用排序的元素做各种其他事情,这些事情无法在未排序的字典或数组中完成。但是如果我们只坚持搜索那么它是不是比其他排序算法更好的搜索方式?

2 个答案:

答案 0 :(得分:2)

是的,精心设计的哈希表可以打败排序和搜索。

为了正确选择,有许多因素可以发挥作用,例如就地要求,数据集的动态性,搜索次数与插入/删除次数,易于构建有效的散列函数......

答案 1 :(得分:1)

二进制搜索是一种搜索技术,它利用了这样一个事实,即key中要搜索key的列表已经被排序,它没有&#39}。 t要求您进行排序然后搜索,使其最差情况下的搜索时间为O(log n)

如果您没有key的排序列表,并且想要搜索key,那么您将不得不进行线性搜索,在最坏的情况下,该搜索会以O(n)复杂度运行,没有必要排序然后搜索哪个肯定更慢,因为最知名的排序算法只能在O(n log n)时间工作。

dictionary list构建key然后执行查找在这里没有任何优势,因为线性搜索会产生相同效果以获得更好的性能,并且还需要辅助在dictionary的情况下需要的记忆;但如果您有多个查找且密钥空间很小使用dictionary可以有利,因为构建字典是O(n)的一次性工作,后续查找可以通过{ {1}}代价是O(1)将使用的一些内存。