动态哈希[缓存]

时间:2016-06-15 01:33:34

标签: algorithm hash

无论编程语言如何,我都想知道我即将实施的内容是不是很糟糕。我有数百万的int64 ID和double值存储在哈希表中。我想先尝试某种动态哈希。这就是我的想法:

  • 尝试形式为<hashedID, value>的固定大小(即100K)散列以及每个单元格 这个哈希表我存储另一个包含相同的hastable 哈希键和列表,如下所示:<hashedID, [ID,count]>

  • 假设ID_1是第一个和第二个哈希表的特定单元格中的驻留元素。现在对于新到达的条目,如果它哈希到相同的hashedID,我检查:如果它与现有ID_1具有相同的ID(我通过第二个哈希表检查),如果是,那么我增加计数。如果没有,那么我减少计数。如果在减少计数后计数为0,我会用刚刚到达的ID替换它。

这样我希望将流行的东西留在第一个哈希表中。

1 个答案:

答案 0 :(得分:1)

这让我想起了一些带有外部链接的哈希表的移动到前端启发式 - https://en.wikipedia.org/wiki/Hash_table说&#34;如果加载因子很大而某些键比其他键更有可能出现,然后用移动到前面的启发式重新排列链可能是有效的。更复杂的数据结构,例如平衡搜索树,只有在负载因子很大(大约10或更多),或者哈希分布可能非常不均匀,或者必须保证良好性能时才值得考虑在最糟糕的情况下。但是,在这些情况下使用更大的表和/或更好的散列函数可能更有效&#34;。另请参阅http://www.seg.rmit.edu.au/code/zwh-ipl/

如果k个条目散列到同一个槽,只有其中一个可以成为获得快速查找的首选条目,所以如果它们的搜索概率大致相同,那么最受欢迎的条目需要0次获得一个只有k /(k-1)的因子。

如果您对实现稍微非标准的哈希表例程感兴趣,https://en.wikipedia.org/wiki/Cuckoo_hashing可能值得一看。