# 学号12 2016-2017-2 《程序设计与数据结构》第9周学习总结

教材学习内容总结

学习目标

  • 定义堆并讨论它的特殊用途

  • 讨论堆的链式实现方式

  • 讨论堆排序

  • 定义优先队列和它与堆的关系

二叉查找树的性质

  • 堆中某个结点的值总是不大于(或不小于)其父结点的值;

  • 堆总是一棵完全二叉树。

  • 堆允许程序在运行时动态地申请某个大小的内存空间

  • 插入:向堆中插入一个新元素;在数组的最末尾插入新结点。然后自下而上调整子结点与父结点:比较当前结点与父结点,不满足堆性质则交换,使得当前子树满足二叉堆的性质。时间复杂度为 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小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2017-11-05 18:03  20162312张家铖  阅读(139)  评论(0编辑  收藏  举报