我正在尝试解决这个问题(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's 找到正确的解决方案。
我的问题是:我的解决方案哪里出错了?为什么不一样?