20162305 2017-2018-1 《程序设计与数据结构》第9周学习总结

20162305 2017-2018-1 《程序设计与数据结构》第9周学习总结

教材学习内容总结

  • 堆是一棵完全二叉树,其中的每个元素大于等于其所有子结点的值。
  • 添加元素入堆:首先将这个元素添加为叶结点,然后将其向上移动到合适的位置。
  • 删除元素:利用最后的叶结点来取代根,然后将其向下移动到合适的位置。
  • 优先队列不是FIFO队列,它根据优先级排列元素,而不是根据它们进入队列的次序来排列。

代码调试中的问题和解决过程

  • 问题1:教材中的代码在调试的过程中遇到了问题,其中的addElement和removeMin方法有问题。而且继承的LinkedMaxHeap中也有问题。

  • 问题1解决方案:

  • addElement继承的是父类中的方法,在LinkedMaxHeap中,存在有add方法而没有addElement方法,将其改为add方法即可。

  • 而removeMin方法,根据removeNext方法的注释


Removes the next highest priority element from this queue and  returns a reference to it. 

我们可知它应该是需要得到一个最大的元素,所以这里应该使用removeMax方法,而这个方法也存在于父类中,这个问题得到解决。

  • 修改完这两个方法后,上面的问题仍然存在。我在张之睿同学的博客中知道了问题出在了哪里。原来PriorityQueueNode类实现了Comparable接口,用到了泛型,把比较的类型设为PriorityQueueNode类型时,漏了一个,加上后问题就得到了解决。

  • 修改后:

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 1、

A full binary tree of height n has _________________ leaves. 

A. 2n
B. 3n
C. 2n
D. 2(n+1)
E. 3(n+1)

  • 正确答案:A

  • 解析:一个完整的二叉树正好有2n个叶子,因为每一片叶子都在同一高度,每个内部节点都有2个孩子。

  • 2、



In a full tree, all leaves are at the same level. 
A . true
B . false

  • 正确答案:A

  • 解析:完全树的定义是一棵树,所有的叶子都在同一水平,每个非叶节点有N个孩子。

  • 3、


In a postorder traversal, the root is the last element visited in the tree. 

A.true
B.false

  • 正确答案:B
  • 解析:一个后序遍历访问右子树,然后左子树,然后根。因此根始终是访问的最后一个元素。

结对及互评

其他(感悟、思考等,可选)

  • 本周学习了堆、优先队列、哈夫曼树这些内容,个人感觉堆这部分内容在有了树的基础上相对容易些,而哈夫曼树我觉得还有很多要去学习,这周是在老师给出了代码的基础上补充方法,对老师给的代码都要好好分析理解。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 20/20
第二周 100/100 1/2 15/35
第三周 454/554 1/3 15/50
第四五周 772/1326 2/5 20/70
第七周 745/2071 2/7 20/90
第八周 1125/3196 2/9 20/110
第九周 810/4006 1/10 20/130 哈夫曼树、堆

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

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

参考资料

posted @ 2017-11-05 11:25  20162305李昱兴  阅读(287)  评论(0编辑  收藏  举报