您的位置:首页 > 其它

《算法导论》 第11章部分答案

2015-09-16 18:23 375 查看

注:以下答案均为自己思考,难免有误,欢迎指正。

11.3-1: 将长度为n的链表进行排序,将关键值的散列值相同的元素排为相邻。而散列表有点类似于链接法解决冲突的散列表。

11.3-2: 一个字符的ASCII码占七位,而128=2^7。所以每次只需计算一位字符(在结果之中互不交叉),而且至多只需要计算后面5位。

11.3-3:(两个字符串有相同的字符和位数,只是排列不同而已)

假设字符串有r位,则散列值为:



又因为字符串有相同的字符,取余前面的求和都相等,所以散列值相等。

11.3-4: 分别为700、318、936、554、172

11.3-5: 对于散列表中每个槽中分配的元素均匀,则碰撞概率的最大值会最小(否则最大值会出现在链表长度最长的槽中)。

假设|U|=n ,|B|=m 。则任意两个元素发生碰撞的概率:



故假设得证。

11.4-1: 线性探查: 22、88、 0、 0、 4、15、28、17、59、31、10

二次探查: 22、 0、88、17、 4、 0、28、59、15、31、10

双重散列: 22、 0、59、17、 4、15、28、88、 0、31、10

11.4-2: HASH-DELETE(T,x)

T[x.key] = DELETED

-----------------------------------------

HASH-INSERT(T,k)

for i=0 to m //m is the number of elements in the table

j = h(k,i)

if T[j]==NIL or T[j]==DELETED

T[j] = K

return j

error "hash table overflow!"

11.4-3: 根据前面公式有

成功查找 - 1/α*ln(1-α)不成功查找 1/(1-α)
α = 3/41.8484
α =7/82.3778

11.4-5: 根据上面公式,用MATLAB解出来约为:0.7135



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: