【问题标题】:Is binary search in an array access faster than using a hash table?数组访问中的二进制搜索是否比使用哈希表更快?
【发布时间】:2012-09-27 22:43:58
【问题描述】:

this website,第 4.4 节中,建议对数组进行二进制搜索,而不是使用哈希表。怎么样?

【问题讨论】:

  • 在建议的正下方,它说 “对数组的二分搜索具有对数复杂性,就像搜索树一样,但具有数组典型的紧凑性和引用局部性的优势。”我>
  • 可能取决于哈希表中有多少桶,以及所涉及的哈希算法的效率。我怀疑你可以笼统地说一个更快。

标签: c++ optimization


【解决方案1】:

有太多因素无法一概而论。

  • 容器中的元素数量。
  • 哈希函数的速度。
  • 比较函数的速度。
  • 哈希冲突的次数。

【讨论】:

  • +1。对于小型数组,二进制和哈希搜索可能比简单的线性搜索有更多的开销。
【解决方案2】:

哈希表(具有良好的哈希函数)具有 O(1) 复杂度(优于 O(log n) ;),因为它们直接“将您链接到”结果。

但是为少量数据/数组使用哈希表可能不值得为表分配所需内存的开销。

【讨论】:

  • 这是有缺陷的。我们这里说的是查找表,所以说计算复杂度根本不对。
  • @nightcracker 什么?这似乎与我有关。使用二进制搜索与哈希表查找数组中的元素是什么问题?
  • @Seth Carnegie:对于具有 O(1) 和 log(N) 复杂度的小 N(例如 0 stackoverflow.com/a/5296669/565635
  • @nightcracker 我意识到这一点并完全同意你的看法,但这并不意味着谈论计算复杂性与这个问题完全没有关系。
  • @nightcracker:对于查找表,如果可能的话,没有什么比随机访问数组更好的了。地图容器可能更有效,甚至是哈希图。
猜你喜欢
  • 2013-10-22
  • 2011-05-02
  • 2020-04-20
  • 2014-06-01
  • 1970-01-01
  • 2010-12-06
  • 2011-04-26
  • 2010-12-26
  • 1970-01-01
相关资源
最近更新 更多