哈希表链地址法缩减重哈希阈值及2pN元素数合理性问询
理解链地址法哈希表缩容时“新表包含2pN个元素”的逻辑
首先我得帮你把这个推导的前提和逻辑链理清楚,这个结论不是链地址法特有的,而是完全基于题目给出的扩容/缩容规则推导出来的,咱们一步步拆:
先明确题目给定的两个核心规则
- 扩容规则:当表大小为
N时,若元素数达到2N(也就是负载因子为2),就触发扩容重哈希,扩容后表大小变为2N(因为缩容是“缩减至原大小的一半”,反过来扩容就是翻倍,这是哈希表常见的扩容策略)。 - 缩容规则:当表变得稀疏时,把表缩减到原大小的一半;我们设
p为缩容的负载因子阈值(即元素数/当前表大小 ≤ p时触发缩容)。
为什么缩容后的新表有2pN个元素?
咱们从缩容触发的时机倒推:
- 缩容发生前,当前表一定是经历过扩容后的状态——也就是表大小为
2N(因为上一次扩容是从N到2N)。 - 当触发缩容时,元素数刚好等于
p * 当前表大小(因为p是缩容的负载因子阈值),也就是元素数 =p * 2N = 2pN。 - 缩容只是把元素重哈希到大小为
N的新表中,元素总数不会变,所以新表的元素数自然就是2pN。
再补一下后续平衡成本的逻辑(帮你串起来)
现在新表大小是N,元素数是2pN,接下来看什么时候会再次触发重哈希:
- 如果一直做插入:要到元素数达到
2N才会扩容,需要插入的次数是2N - 2pN。 - 如果一直做删除:要到元素数降到
p*N(新表大小N的缩容阈值)才会缩容,需要删除的次数是2pN - pN = pN。
为了避免频繁触发重哈希(一会儿扩容一会儿缩容),我们希望这两个次数尽可能相等,也就是:
2N - 2pN = pN
两边约掉N,解出来就是p = 2/3,这就是最优阈值的来源。
简单说,2pN这个数值只是基于题目给定的扩容/缩容规则,从缩容触发时机推导出来的元素数,和链地址法本身无关——换成开放寻址法,只要扩容/缩容规则一样,这个推导逻辑也成立。
内容的提问来源于stack exchange,提问作者Lily
相关产品推荐
相关产品推荐

