稀疏哈希表背后的主要实现思想是啥?
Posted
技术标签:
【中文标题】稀疏哈希表背后的主要实现思想是啥?【英文标题】:What is the main implementation idea behind sparse hash table?稀疏哈希表背后的主要实现思想是什么? 【发布时间】:2011-07-14 10:32:17 【问题描述】:为什么 Google sparsehash 开源库有两种实现方式:密集哈希表和稀疏哈希表?
【问题讨论】:
我想我误解了帖子中的问题。不会稀疏哈希表 + 密集哈希表 == 所有哈希表吗?如果是这样,那为什么这个库叫“sparsehash”? 顺便说一句:documentation from Google Code. 【参考方案1】:稠密哈希表是您普通的教科书哈希表实现。
稀疏散列表仅存储实际设置的元素,并划分为多个数组。在稀疏表的实现中引用comments:
// The idea is that a table with (logically) t buckets is divided
// into t/M *groups* of M buckets each. (M is a constant set in
// GROUP_SIZE for efficiency.) Each group is stored sparsely.
// Thus, inserting into the table causes some array to grow, which is
// slow but still constant time. Lookup involves doing a
// logical-position-to-sparse-position lookup, which is also slow but
// constant time. The larger M is, the slower these operations are
// but the less overhead (slightly).
要知道设置了数组的哪些元素,稀疏表包括位图:
// To store the sparse array, we store a bitmap B, where B[i] = 1 iff
// bucket i is non-empty. Then to look up bucket i we really look up
// array[# of 1s before i in B]. This is constant time for fixed M.
这样每个元素只产生 1 位的开销(在限制范围内)。
【讨论】:
【参考方案2】:sparsehash 是一种将键映射到值(每个键 1-2 位)的内存高效方式。布隆过滤器可以为每个键提供更少的位数,但它们不会将值附加到外部/可能内部以外的键,这比一点信息略少。
【讨论】:
以上是关于稀疏哈希表背后的主要实现思想是啥?的主要内容,如果未能解决你的问题,请参考以下文章