• 20162316刘诚昊 第九周学习总结


    20162316刘诚昊 2017-2018-2 《Java程序设计》用数组实现循环队列


    教材学习内容总结

    第十八掌 堆和优先队列

    1.堆是一棵完全二叉树,分为最大堆最小堆
      1.1最大堆的每个元素都要大于等于它的所有孩子(最小堆反之)。
      1.2堆有三种基本操作:向堆中添加新元素、找到最大值、以及删除最大值。
    2.向最大堆中添加新元素时,先将其称为新叶节点,位置尽可能靠左。接下来对换相应位置,保证其为堆。
    3.向最大堆中删除最大值时,也即删除根节点时,将最后一层最右边的叶节点置于根节点位置,再开始交换位置直至成为新的堆。
    4.堆排序是将一组元素一项一项地插入到堆中,然后一次删除一个,最大堆得到降序的排列结果,最小堆反之。
    5.优先队列是一个服从两个有序规则的集合。
      ——更高优先级队列的在前,相同优先级则遵从FIFO规则。优先队列并不是FIFO队列


    课堂学习内容

    一、哈夫曼树

    哈夫曼树有着类似于最大堆的性质,但并非一定是完全树;它以当前数组中最小两个数构成节点后相加得到新的数,将这个数归于数组中再继续做相同的步骤。

    二、堆

    堆常被用来实现优先队列,First in,Largest out.在这堂课老师讲的和书上较多重复,便不再赘述。


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

    Q1:教材中提到的都比较简单,但哈夫曼树的编码方面有些没能理解。

    解决方案:在课堂上看着老师给的任务我有点稀里糊涂,没听懂是什么意思,确实是没能把哈夫曼树和它的编码联系起来,一开始觉得完全是两回事怎么融合到一起的呢?
      后来在网上查资料得知它是将叶子节点规定好位置以后,按从根到它的左或右枝的路径,以0或1的方式给出。另外老师当时讲一个字符的编码不能是另一个编码的前缀,这种方式很优秀地避开了这种错误。


    考试错误总结


    虽然A、C看起来一样,但我确实想错了。错误之处在于:高度与深度应该都是从0开始,而非1开始,因此我当时觉得是没有答案。


    这道题是我的理解出了错误,将它理解为“某个节点的高度和深度是相同的”


    粗心了。。


    这道题答案出了问题,我是对的。


    代码托管


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

    到这周为止我终于完全已经跟上学习进度啦,可喜可贺。哈哈哈哈。

  • 相关阅读:
    Spring Boot SOAP系列之WSDL是什么“Lese”
    MyBatis源码分析和纯手写MyBatis框架集合
    哪吒:我命由我不由天
    手写MyBatis,纯手工打造开源框架(第四篇:决胜千里)- 第272篇
    Linux Submitting Patch
    Setting Up MySQL Debugging Environment
    How to mannuly configure vmtools in VM-Ware?
    How to mannuly configure vmtools in VM-Ware?
    Install 32bit libraries in 64 bit ubuntu(14.10)
    The easiest way to extract/uncompress files
  • 原文地址:https://www.cnblogs.com/ignor/p/7789341.html
Copyright © 2020-2023  润新知