【发布时间】:2016-07-30 20:17:04
【问题描述】:
我正在尝试解决这个问题(CLRS,第 3 版,练习 11.2-1):
假设我们使用散列函数 h 将 n 个不同的键散列到长度为 m 的数组中。假设简单的统一哈希,预期的冲突次数是多少?
正确的解是n(n-1)/2m。这取自 CLRS 的讲师手册。
我的解决方法如下:
对于键 1 的插入:预期与前任的冲突数 = 0
对于键 2 的插入:预期与前任的冲突数 = 1/m
对于键 3 的插入:预期与前任的冲突数 = 1/m*(1/m) + (m-1)/m*(2/m) = (2m-1)/m ^2
我的推理:密钥 1 和 2 在 1 个插槽中发生碰撞的概率为 1/m,这意味着密钥 3 的碰撞概率为 1/m。密钥 1 和密钥 2 没有碰撞的概率为 (m-1)/m,这意味着它们位于不同的插槽中,密钥 3 的碰撞概率为 2/m。
3 个键的预期碰撞次数,按期望线性度 = 0 + 1/m + (2m-1)/m^2 = (3m-1)/m^2
根据 CLRS,3 个键的预期碰撞次数应为 3/m。
我知道如何使用指标 RV 找到正确的解决方案。
我的问题是:我的解决方案哪里出错了?为什么不一样?
【问题讨论】:
标签: algorithm hash hashtable clrs