我对哈希表的理解是,它们使用哈希函数将键与内存中的位置相关联,并在内存中预先分配了总数的“桶”。目标是有足够的桶,我不必使用链接,将我理想的O(1)
访问时间复杂度减慢到n/m x O(1)
其中 n 是要存储的唯一键的数量,m 是桶的数量。
因此,如果我要存储 1000 个独特的项目,我将需要不少于 1000 个存储桶,并且可能需要更多存储桶,以尽量减少必须使用我的链表的可能性。如果不是这种情况,我们预计平均哈希表会有很多很多的冲突。现在,如果我们有 1000 个预分配的存储桶,这意味着我有 1000 字节的分配内存,分布在我的内存周围。因此,我的哈希表中的每个唯一键都会导致内存碎片,从而使我的 RAM 碎片化。
这是否意味着使用哈希表基本上可以保证产生与唯一键数量成正比的碎片量?此外,这似乎表明,如果您知道将有多少个唯一键,则可以使用一些统计信息来选择存储桶的数量,从而大大减少碎片化。是这样吗?