教材学习内容总结
学习目标
定义堆并讨论它的特殊用途
讨论堆的链式实现方式
讨论堆排序
定义优先队列和它与堆的关系
二叉查找树的性质
堆中某个结点的值总是不大于(或不小于)其父结点的值;
堆总是一棵完全二叉树。
堆允许程序在运行时动态地申请某个大小的内存空间
插入:向堆中插入一个新元素;在数组的最末尾插入新结点。然后自下而上调整子结点与父结点:比较当前结点与父结点,不满足堆性质则交换,使得当前子树满足二叉堆的性质。时间复杂度为 O(logn)。
教材学习中的问题和解决过程
问题1:优先队列不是很理解
问题1解决方案:查阅了相关资料促进了理解:
插入操作:插入操作是将一个元素插入到集合S中,首先把该元素放入所有元素的下一位置,然后执行“上浮”操作,如下图示例(注意,下图示例是小堆,不过原理是一样的
移除操作: 优先队列中,在队列非空情况下移除集合中第一个元素,也就是下标为0的元素,然后将集合中最后一个元素移到下标为0位置,在将下标为0的新元素执行“下沉”操作。如下图示例(注意,下图示例是小堆,不过原理是一样的,图片来自深入理解Java PriorityQueue)
## 代码调试中的问题和解决过程
问题:PeiorityQueueNode类一直有问题,找不到原因
解决方案:询问了课代表,后来知道这是书上代码出现了问题,按照老师给的图片进行修改后就可以了。
错题及总结(第七周课下测试忘做了,时间已经截止)
代码托管
结对及互评
讨论了堆与栈的区别
本周结对学习情况
思考
学习还需要进一步深入
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 6/6 | |
第二、三周 | 403/403 | 2/3 | 14/20 | |
第4、5周 | 1452/1855 | 2/5 | 8/28 | |
第6周 | 231/2086 | 1/6 | 8/36 | |
第七周 | 620/2706 | 2/8 | 8/44 | |
第八周 | 722/3428 | 2/10 | 8/52 | |
第九周 | 1022/4450 | 1/11 | 8/60 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:9小时
实际学习时间:8小时
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)