一尘不染

哈希查找或二进制搜索哪个更快?

algorithm

当给定一个静态对象集(静态的,一旦加载后就很少加载,则是静态的),需要在其中进行重复并发查找以达到最佳性能,哪个更好,HashMap还是使用一些自定义比较器进行二进制搜索的数组?

答案是对象还是结构类型的函数?哈希和/或相等函数性能?哈希唯一性?清单大小? Hashset尺寸/布景尺寸?

我正在查看的布景大小可能在500k到10m之间,以防信息有用。

当我在寻找C#答案时,我认为真正的数学答案不在于语言,因此我不包含该标记。但是,如果有C#特定的事情要注意,则需要该信息。


阅读 336

收藏
2020-07-28

共1个答案

一尘不染

好吧,我会尽量简短。

C#简短答案:

测试两种不同的方法。

.NET为您提供了通过一行代码来更改方法的工具。否则,请使用System.Collections.Generic.Dictionary,并确保将其初始化为大容量作为初始容量,否则由于GC必须执行收集旧存储区阵列的工作,因此您将在余生中插入项目。

更长的答案:

哈希表具有ALMOST恒定的查找时间,并且在现实世界中访问哈希表中的项目并不仅仅需要计算哈希。

要获得某项,您的哈希表将执行以下操作:

  • 获取密钥的哈希
  • 获取该哈希的存储桶编号(通常,地图函数看起来像此存储桶=哈希%bucketsCount)
  • 遍历从该存储桶开始的项目链(基本上是共享相同存储桶的项目列表,大多数哈希表使用这种处理存储桶/哈希冲突的方法),并将每个键与您要添加/添加的项目之一进行比较/删除/更新/检查是否包含。

查找时间取决于散列函数的“良好”程度(输出的稀疏程度)和快速程度,所使用的存储桶数以及键比较器的速度如何,这并不总是最佳的解决方案。

更好更深入的解释:http :
//en.wikipedia.org/wiki/Hash_table

2020-07-28