20172322 《程序设计与数据结构》第八周学习总结

教材学习内容总结

本章的内容主要讲堆的知识,而所谓堆就是一种具有一些特殊属性的树,就像二叉查找树一样。而堆也有两种分类,分别是

  • 最大堆

  • 最小堆

但是无论是最大堆还是最小堆的第一个特殊属性均为:

  • 堆必须是一棵完全树。

第二个特殊属性是:

  • 对于每一个结点,它小于或等于/大于其左右孩子。

但本章的内容主要以最小堆为例,学会了最小堆可以类比退出最大堆的性质。

因为堆是一种含有特殊属性的树,所以在本章中堆继承了以前二叉树的所有性质,本章仅仅是在BinaryTreeADT基础上添加了addElementremoveMinfindMin方法。

  • addElemnt方法:因为堆是一个完全树,所以说所添加元素的位置必定为堆的最后一层或最后一层之后的左边第一个位置。但在添加元素后还需要考虑整个堆的属性是否保持完成,所以说需要考虑重新排序。
  • removeMin方法:删除堆的根结点后重新排序。
  • findMin方法:简单的返回根结点的操作。

与以往类似,本次分别利用链表和数组实现堆。

  • 链表实现堆:创建HeapNode类继承BinaryTreeNode类,但由于BinaryTreeNode无双亲结点的存在,所以在HeapNode中添加了一个双亲指针。(值得注意的是,添加双亲结点的原因是:在我们插入元素之后我们需要向上遍历该树,所以必须存在一个指向双亲的指针

    • addElement方法的复杂度是O(logn),与此方法同时存在的是getNextParentAddheapifyAdd方法,他们用于返回插入结点的双亲的引用和对添加元素后的堆进行重排序。
    • removeMin方法的复杂度同为O(logn),与此方法同时存在的是getNewLastNodeheapifyRemove方法,他们用于返回新插入的节点和对删除元素后的堆进行重排序。
    • findMin方法:return root.element
  • 数组实现堆:与二叉树相同,对于任一结点n,n的左孩子将位于数组的2n+1位置处,n的右孩子将位于数组的2(n+1) 处,而对于任一非根结点m,m的双亲结点位于 (n-1)/2处,这意味着我们利用数组实现堆不需要建立一个HeapNode类。
    • 利用数组实现堆的addElementremoveMinfindMin方法的解释与利用链表实现堆类似,个人觉得无需过多言语。
  • 堆排序:这是一种全新的排序算法。这种排序算法完全是根据堆的性质而思考出来的排序算法。以最小堆为例,每次将根结点与最后一个结点互换后,将最后一个结点提出树,这样就得到了一个最小的元素。在提出最小结点过后对树重新排序,之后重复以上两步操作直到排序完成。如图所示:

教材学习中的问题和解决过程

本章的内容就是对之前内容的简单拓展,实在是找不到什么问题。如果真的要我找一个问题就是:

  • 问题一:在书P265中偏下部有一句话“n的右孩子将位于数组的2(n+1)位置处当然,反过来......”,这句话一读就有问题。
  • 问题一解决方案:这句话应该为“n的右孩子将位于数组的2(n+1)位置处,当然反过来......”

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

  • 问题一:在完成PP12.1时,自己最初只是简单的以为利用书上的优先队列的代码就可以完成,但是这好像是我没有认真读题。
  • 问题一解决方案:在结对伙伴范雯琪提醒下,自己重写了队列,在书上优先队列PriorityQueue的基础上删除了实现优先级的代码,就实现啦。

代码托管“点这里跳转到码云”

上周考试错题总结

  • 错题1:A binary search tree is a binary tree with the added property that the left child is greater than the parent, which is less than or equal to the right child.
  • A.True
  • B.False
  • 错题1解析:二叉排序树或者是一棵空树,或者是具有下列性质的二叉树,
    • 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
    • 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    • 左、右子树也分别为二叉排序树;
    • 没有键值相等的节点。
  • 错题2:A binary search capitalizes on the fact that the list is not sorted.
  • A.True
  • B.False
  • 错题2解析:二叉查找树正式利用列表是被排序过才能进行搜索。
  • 错题3:A binary search can only be performed if the search pool is sorted.
  • A.True
  • B.False
  • 错题3解析:当查找池被排序好了以后就只能利用二叉查找树来搜索。

结对及互评

  • 博客中值得学习的或问题:

    • 范雯琪同学的博客课本上的学习内容总结部分写得十分详细,值得学习。
    • 范雯琪同学在博客中展示的图都很直观。
  • 代码中值得学习的或问题:
    • commit提交的解释清晰明了,我觉得我应该学习。

点评过的同学博客和代码

  • 本周结对学习情况

    • 20172303

    • 结对学习内容
      • 她提醒了我的PP12.1有点问题,感谢。

其他

  • 感悟:这周的知识仅仅是之前知识的一点点拓展,不难,但是也需要认真对待。

课本单词

(本部分用于收集本章节后的生词)

  • heap:堆
  • minheap:最小堆
  • maxheap:最大堆
  • complete binary tree:完全二叉树
  • priority tree:优先树

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/5000 2/2 8/8 认真学习!积极向上
第二周 812/812 1/3 22/30
第三周 814/1626 1/4 20/50
第四周 1386/3012 2/6 20/70 愉快的国庆节就要结束了...
第五周 1222/3234 1/7 30/100
第六周 1327/4561 2/7 30/100 啦啦啦啦啦
第七周 1170/5631 1/8 33/133
第八周 1250/6881 2/10 30/163
  • 计划学习时间:25小时

  • 实际学习时间:30小时

  • 改进情况:根据学姐的建议改进了commit。

参考资料

  • 《Java软件结构与数据结构》
  • 《二叉排序树》

转载于:https://www.cnblogs.com/zhangyeye233/p/9940512.html

20172322 《程序设计与数据结构》第八周学习总结相关推荐

  1. 20172304 《程序设计与数据结构》第九周学习总结

    20172304 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本章是第十五章,主要介绍了图的概念. 首先我来介绍一下图的基本结构. 从逻辑上讲,图是由边和结点组成的,在我的理解 ...

  2. 20172315 2017-2018-2 《程序设计与数据结构》第九周学习总结

    学号 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常是定义一个非正常情况或错误的对象,由程序或运行时环境抛出. 异常与错误不同,错误代表不可恢复的问题 ...

  3. 20162329张旭升 2016-2017-2 《程序设计与数据结构》第九周学习总结

    20162329张旭升 2016-2017-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 1.建立数据库连接:我们是通过老师给的XAMPP程序来配置自己的数据库,然后根据教程 ...

  4. 20162302 《程序设计与数据结构》第一周学习总结

    20162302 2017-2018-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 很多情况下时间和空间不可兼得.在不同的情况下,要么用时间换空间,要么用空间换时间. 引出算 ...

  5. 20172304 《程序设计与数据结构》 第二周学习总结

    20172304 <程序设计与数据结构>第二周学习总结 教材学习内容总结 本周主要学习了第三章和第四章的内容 第三章 集合概述--栈 3.1集合 集合是一种聚集组织了其他对象的对象. 集合 ...

  6. 20172323 2017-2018-2 《程序设计与数据结构》第九周学习总结

    教材学习内容总结 本周学习第十一章异常和第十二章 第十一章-异常 异常是一个定义非正常情况或错误的对象,由程序或运行时环境抛出,可以根据需要进行相应的捕获和处理. 错误和异常都是对象,代表非正常情况或 ...

  7. 20162329 2017-2018-1 《程序设计与数据结构》第九周学习总结

    第九周学习总结 一.学习目标 二叉查找树的理解 二叉查找树的实现 平衡二叉查找树 哈夫曼树的实现 堆的理解 堆的实现 二.学习内容 1.二叉查找树 思路: 二叉查找树与一般二叉树的区别在于,二叉查找树 ...

  8. 20162303《程序设计与数据结构》第一周学习总结

    学号 2016-2017-2 <程序设计与数据结构>第1周学习总结 教材学习内容总结 本周学习了基本的JAVA知识,虽然比较基础,但是在实际过程中还是出现了许许多多的问题,代码一遍遍的敲错 ...

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

    2017-2018-1 学习总结目录: 1 2 3 5 6 7 9 10 11 12 目录 0. 本周学习内容总结 0.1 Comparable接口与Comparator接口的使用 0.2 泛型方法设 ...

  10. 201771010118马昕璐《面向对象程序设计java》第八周学习总结

    第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...

最新文章

  1. VisualStudio opencv配置
  2. 无向网络节点重要性指标
  3. 逻辑回归:损失函数与梯度下降
  4. php 如何调用redis,php如何调用redis
  5. JMETER从JSON响应中提取数据
  6. windows 2008r2文件服务器部分用户访问不了_苹果设备如何访问 Windows 文件共享?...
  7. html标签info,HtmlTrInfo 元素
  8. 使用js函数实现的通过输入框中数据的长度来控制光标聚焦位置
  9. LCP 01. 猜数字
  10. linux--GCC用法
  11. tomcat设置编码为UTF-8
  12. HCIA物联网初级考试-第二章物联网常用的通信技术
  13. 微信小程序内容组件图标 icon
  14. 谷歌浏览器搜索框记录_如何清除您的Google搜索记录
  15. javaScript入门,新手小白也能会
  16. Python 自动化测试实战
  17. 并购支付牌照中金支付90.01%股权该注意哪些风险
  18. Redis解决高并发(秒杀抢红包)
  19. python中的reshape函数
  20. React实战:留言板

热门文章

  1. 使用Team Foundation Server进行源代码管理(转)
  2. Android中pendingIntent的深入理解
  3. JSP怎么将表单提交到对应的servlet
  4. 数据绑定控件之ListView
  5. hadoop MapReduce实例解析
  6. C++ STL泛型编程——在ACM中的运用
  7. Nginx-03:Nginx安装、命令、配置文件
  8. STM32的IIC应用详解2
  9. 《看透springmvc源码分析与实践》读书笔记二
  10. 一起从头学习Flex