我有一个哈希表,运行时绝大多数访问都遵循以下模式之一:
我还希望它尽量少消耗内存。
其他标准操作必须可用,但使用频率较低,例如
当然,所有“标准”哈希表实现(包括大多数高级语言的标准库)都具有所有这些功能。我正在寻找的是针对第一个列表中的操作进行优化的实现。
常见实施的问题:
有效但不太理想的方案:
是否有专门的散列方案可以适用于这种情况?
注意:我有一个很好的哈希函数,适用于2的幂和素数表大小,并且可以用于双重哈希,所以这不应该是一个问题。
答案 0 :(得分:2)
Extendable Hashing会有帮助吗?通过走“目录”来迭代键应该很快。不确定使用此方案的“修改键值”操作是否更好。
答案 1 :(得分:1)
根据您访问数据的方式,使用哈希表真的有意义吗?
由于您的主要用例涉及迭代 - 排序列表或btree可能是更好的数据结构。
看起来你真的不需要为哈希表构建的常量时间随机数据访问。
答案 2 :(得分:1)
使用布谷鸟散列可以比50%的负载因子做得更好。
两个带有四个项目的哈希函数可以轻松实现90%以上。见本文:
http://www.ru.is/faculty/ulfar/CuckooHash.pdf
我正在使用cuckoo哈希构建一个预先计算的字典,并使用两个哈希函数和每个存储桶七个项目获得优于99%的加载因子。