20162304 2017-2018-1 《程序设计与数据结构》第九周学习总结
2017-11-05 15:25
330 查看
20162304 2017-2018-1 《程序设计与数据结构》第九周学习总结
教材学习内容总结
堆的定义;堆的实现;
堆排序;
优先队列以及它与堆的关系
教材学习中的问题和解决过程
问题1:优先队列的深入理解。我们知道优先队列其实内部实现就是一个堆的数据结构,java默认的是一个小跟堆,每次取出最小的元素,因为堆的性质他可以做到O(logn)级别的插入和删除操作。
我们知道堆的性质是有:
堆中某个结点的值总是不大于(或不小于)其父结点的值;
堆总是一棵完全二叉树。
将根结点最大的堆叫做大根堆,根结点最小的堆叫做小根堆。常见的堆有二叉堆、斐波那契堆等
插入:向堆中插入一个新元素;在数组的最末尾插入新结点。然后自下而上调整子结点与父结点:比较当前结点与父结点,不满足堆性质则交换,使得当前子树满足二叉堆的性质。时间复杂度为 O(logn)。
弹出:删除堆顶元素,再把堆存储的最后那个结点填在根结点处。再从上而下调整父结点与它的子结点。时间复杂度为 O(logn)。
删除:使该元素与堆尾元素交换,调整堆容量,再由原堆尾元素的当前位置自顶向下调整。时间复杂度为 O(logn)。
如果经常需要合并两个堆的操作,那么使用二项堆、斜堆、左偏树等数据结构会更好。
可并堆支持合并操作,使得合并后的堆也能保持堆的性质。左偏树是可并堆的一种,保证左子树的深度大于右子树的深度,再用右子树与另一个堆合并。
因此,堆支持查询最值、插入、删除操作。
代码调试中的问题和解决过程
问题1:getMax()方法的实现问题1解决方案:开始实现getMax方法时,我没有什么头绪,原来的代码中有removeMax方法,于是就先研究这个方法试图通过类比得出getMax方法
我发现removeMax方法中直接将根值删去,于是我想到堆中最大值为根,只要得到根的值即为最大值。
代码托管
点评过的同学博客和代码
本周结对学习情况20162318
结对照片
结对学习内容
堆的学习
上周考试错题总结
上周无考试其他(感悟、思考等,可选)
本周内容感觉与之前内容有很多相似之处,可以前后联系的学。学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 10/10 | |
第二周 | 0/0 | 1/2 | 10/20 | |
第三周 | 163/163 | 1/3 | 12/32 | |
第四周 | 207/370 | 1/3 | 11/43 | |
第五周 | 931/1301 | 1/4 | 12/55 | |
第六周 | 391/1692 | 2/6 | 15/70 | |
第七周 | 760/2452 | 2/8 | 13/83 | |
第八周 | 1178/3630 | 2/8 | 13/83 | |
第八周 | 1199/4829 | 1/9 | 11/94 |
实际学习时间:10小时
参考资料
《Java程序设计与数据结构教程(第二版)》《Java程序设计与数据结构教程(第二版)》学习指导
相关文章推荐
- 20162304 2017-2018-1 《程序设计与数据结构》第七周学习总结
- 20162304 2017-2018-1 《程序设计与数据结构》第六周学习总结
- 20162311 2017-2018-1 《程序设计与数据结构》第九周学习总结
- 20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结
- 20162304 2017-2018-1 《程序设计与数据结构》第二周学习总结
- 20162304 2017-2018-1 《程序设计与数据结构》第五周学习总结
- 20162304 2017-2018-1 《程序设计与数据结构》第八周学习总结
- 20162304 2017-2018-1 《程序设计与数据结构》第十周学习总结
- 20162304 2017-2018-1 《程序设计与数据结构》第十一周学习总结
- 20162330 2017-2018-1《程序设计与数据结构》第九周学习总结
- 20162304 2017-2018-1 《程序设计与数据结构》第三周学习总结
- 20162304 2017-2018-1 《程序设计与数据结构》第一周学习总结
- # 20162308 2017-2018-2 《程序设计与数据结构》第九周学习总结
- 20162307 2017-2018-1 《程序设计与数据结构》第7周学习总结
- 2017-2018-1 20155332 《信息安全系统设计基础》第九周学习总结
- 2017-2018-1 20155320 《信息安全系统设计基础》第九周学习总结
- 20162319 2017-2018-20162319 《程序设计与数据结构》第6周学习总结
- 20162306 2017-2018-1《程序设计与数据结构》 第11周学习总结
- 2017-2018-1 20155312 《信息安全系统设计基础》第九周学习总结
- 20162311 2017-2018-1 《程序设计与数据结构》第三周学习总结