【考试临时抱佛脚】系列文章针对于<学习时间少>、<时间紧迫>、<想短时间提升成绩>的考生打造。无论你是<自考>、<专升本>还是<考研>这个专栏都适合你,Let’s go!
一、方法
解题步骤
① 线性探查算法: 探测的下标序列依次后移一位,发现空闲就填入
② 二次探测算法: 探测的下标序列是:hash(key)+0, hash(key) + 1^2,hash(key) + 2^2…
③ 特别注意: 散列表是从0开始的
二、考察形式1
1、问题
设散列表长m = 14 , 散列函数 H(key) = key%13。采用线性探测法处理冲突,表中已按散列地址保存了3个关键字16、30、18,此时存储关键字29的探查次数是( )
A. 1
B. 2
C. 3
D. 4
2、解析&回答
解析:
① 计算散列值: 3个关键字的散列值:H(16) = 3, H(30) = 4 , H(18) = 5
② 关键字29的散列值: H(29) = 3
答案:D
三、考察形式2
1、问题
散列表的平均查找长度不是结点个数n的函数,而是 () 的函数。
2、解析&回答
解析:
记忆题,记住就好~答案:装填因子
四、考察形式3
1、问题
散列表的存储中,拉链法(链地址法)是处理 () 的方法。
2、解析&回答
解析:
记忆题,记住就好~答案: 冲突
五、考察形式4
1、问题
设散列表长m=10,散列函数 H(key) = key%9。表中已保存3个关键字:H(13)=4, H(32)=5, H(15)=6,其余地址均为空。
保存关键字23时存在冲突,采用线性探查法来处理。则查找关键23时的探查次数是 ( )
A. 1
B. 2
C. 3
D. 4
2、解析&回答
解析:
① 关键23的散列哈希值:H(23) = 5
② 查找关键23时:第一次找到H(32)=5 占用了,向后找到
③ H(15)=6 也占用了,再向后未占用
④ 所以探查次数是3次
答案:C
五、考察形式4
1、问题
设有关键字16、15、32、11、6、30,将它他依次保存在哈希表(长度为7的一维数组)中,哈希函数为H(k) = k mod 7,采用线性探查法解决冲突。已知关键字16已放置在数组下标为2的位置。请画出哈希表。
2、解析&回答
解析:
① 已知:关键字16、15、32、11、6、30
② 长度为7的一维数组:那就是0-6
③ 哈希函数为H(k) = k mod 7
④ 已知关键字16已放置在数组下标为2的位置答案:
六、考察形式6
1、问题
设有散列表函数为:H(key) =key MOD 11,散列表长度为11,解决冲突的方法为线性探测法,关键字的输入序列为(18,34,58,26,75,67,48,93,81)
试构建此散列表,并求出在等概率情况下查找成功和不成功时的平将查找长度。
2、解析&回答
解析:
① 计算散列函数值:
H(18) = 18 MOD 11 = 7
H(34) = 34 MOD 11 = 1
H(58) = 58 MOD 11 = 3
H(26) = 26 MOD 11 = 4
H(75) = 75 MOD 11 = 9
H(67) = 67 MOD 11 = 1
H(48) = 48 MOD 11 = 4
H(93) = 93 MOD 11 = 5
H(81) = 81 MOD 11 = 4
② 查找成功和不成功时的平将查找长度公式:
ASL(成功)= 关键字比较次数相加 / 关键字个数
ASL(失败)= 空单元格数量 + 每个关键字到第一个空格处的间格数量含本身 / 散列表总长度
答案:
ASL(成功)= (1+2+1 +1+2+2+1+5+1)/ 9 = 16/9
ASL(失败)= (2+10+9+8+7+6+5+4+3+2) /11 = 56/11