20172322 2018-2019-1 10月19日课上测试报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 张昊然
学号: 20172322
实验教师:王志强老师
测试日期:2018年10月19日
必修/选修: 必修
增补的习题原题
需要查找的数字初始顺序为11,78,10,1,3,2,4,21
课上提交的作业所存在的问题
- 二分查找部分的ASL算错。
- 散列查找(线性)部分的储存结构错误,ASL算错。
- 散列查找(链地址)部分的储存结构错误。
改正方案及分析思路
- 二分查找
先排序,排序后顺序为:1 2 3 4 10 11 21 78
放入数组中,(假设算法中要求先找较小的数)
如图:
ASL = (1 + 22 + 34 + 4 )* 1/8 = 21/8 = 2.625
- 散列查找(线性)
n = 8 ,故m的取值在应在8.8-13.6之间,本次选取11作为m。
如图,
其中11,78,10先行进入第0,第1,第10个位置,
1需要放入时出现冲突,故(1+1)/ 11 = 2,所以1放入第2个位置。
3放入第3个位置,
2需要放入时产生冲突,故(1+1)/11=2也有冲突,故(1+1+1)/11=3,所以2放入第4个位置,
4需要放入时产生冲突,故(4+1)/11=5,5放入第五个位置,
21需要放入时产生冲突,故21放入第6个位置。
ASL = (1+1+2+1+3+2+1+8) * 1/8 = 2.375
- 散列查找(链地址)
如图,
11,78,10先行进入第0,第1,第10个位置,
1需要放入时出现冲突,故将1放入78的链后,
3,2,4放入时均无冲突,
21放入时产生冲突,故将21放入10的链后。
ASL = (81 + 22)/8 = 1.25
感想
- 二分查找对于偶数个元素来说不像之前奇数个那么简单
- 对于散列查找的储存不需要排序!