20172322 2018-2019-1 10月19日课上测试报告

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.375

  • 散列查找(线性)
    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

感想

  • 二分查找对于偶数个元素来说不像之前奇数个那么简单
  • 对于散列查找的储存不需要排序!

猜你喜欢

转载自www.cnblogs.com/zhangyeye233/p/9815719.html