算法导论11章散列表 思考题总结

11-1 (散列最长探查的界) 采用开放寻址法,用一个大小为 m 的散列表来存储 n ( n <= m/2 ) 个数据项目。

a. 假设采用均匀散列,证明:对于 i = 1,2,... ,n,第 i 次插入需要严格多于 k 次探查的概率至多为 2^(-k) 。

ANSWER:


b. 证明:对于 i = 1,2,... ,n,第 i 次插入需要多于 2lgn 次探查的概率为 O( 1/ n^2 )。

ANSWER:


  设随机变量 Xi 表示第 i 次插入所需的探查次数。在上面(b)中已证明Pr{ Xi > 2lgn } = O( 1/n^2 )。设随机变量X = max( 1<= i <= n )Xi 表示 n 次插入中所需探查数的最大值。

c. 证明:Pr{ X > 2lgn } = O( 1/n )。

ANSWER:


d. 证明:最长探查序列的期望长度为 E( x ) = O( lgn )。

ANSWER:



11-2 (链接法中槽大小的界) 假设有一个含 n 个槽的散列表,向表中插入 n 个关键字,并用链接法来解决碰撞问题。每个关键字被等可能地散列到每个槽中。设在所有关键字被插入后,设 M 是各槽中所含关键字数的最大值。读者的任务是证明 M 的期望值E[ M ]的一个上界为O( lgn / lglgn )。
 a.  证明:正好有 k 个关键字被散列到某一特定槽中的概率 Qk 为 Qk = ( 1/n )^k * ( 1-1/n )^( n-k ) * C(n,k)。
ANSWER:共有C(n,k)个组合;k 个关键字被散列到该特定槽的概率为 ( 1/n )^k;剩下( n-k )个关键字被散列到其它槽的概率为( 1-1/n )^( n-k )。

b. 设 Pk 为 M = k 的概率,即包含最多关键字的槽中有 k 个关键字的概率。证明:Pk ≤ nQk。
ANSWER:令槽 i 为最多关键字的槽,则其它槽的关键字个数需少于 k ,所以槽 i 为关键字最多且关键字个数为 k 的概率为
 c. 应用斯特林近似公式(3.18)来证明 Qk < (e^k) / (k^k)。

d. 证明:存在常数 c > 1,使得 Qk0 < 1 / n^3 对 k0 = clgn / lglgn 成立。并有结论:对 k ≥ k0 = clgn / lglgn,Pk < 1 / n^2 成立。


e. 证明:E[ M ] ≤ Pr{ M > clgn / lglgn } * n + Pr{ M ≤ clgn / lglgn } * clgn / lglgn。
并有结论:E[ M ] = O( lgn / lglgn )。
ANSWER:



11-3 (二次探查) 假设要在一个散列表 (表中的各个位置为0,1, ...,m-1 ) 中查找关键字 k,并假设有一个散列函数 h 将关键字空间映射到集合{ 0,1,..., m-1 }上,查找方法如下:
1. 计算值j = h( k ),置 i = 0。
2. 探查要找的关键字 k 的位置,或者找到了,或者该位置为空,并结束查找。
3. 置 i = i + 1。如果 i = m,则表已满,于是终止探查;否则,设 j = (i + j) mod m,返回到步骤2。
       
    假设m是2的幂。
a. 通过给出等式( 11.5 )中 c1 和 c2 的适当值,来证明这个方案是一般的“二次探查”法的一个实例。
ANSWER:当第 i 次查找,

                    j = [ h( k ) + 1 + 2 + ... + i ] mod m = [ h( k ) + i /2 + i^2 / 2 ] mod m。

                   ∴ C1 = 1/2   ,C2 = 1/2  。



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值