zoukankan      html  css  js  c++  java
  • 20172319 《程序设计与数据结构》 第八周学习总结

    20172319 2018.11.04-11.11

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

    目录


    教材学习内容总结

    第十二章 优先队列与堆

    • 12.1 堆:

    • 堆(heap) ** : 具有两个附加属性 ** 的二叉树;是一棵完全二叉树。

    • 最小堆(minheap) : 每一结点小于或等于其两个孩子;其根的两个孩子同样为最小堆。

    • 最大堆(maxheap) : 每一结点大于或等于其两个孩子;其根的两个孩子同样为最大堆。

    • 元素相同,构造的堆也可以不同:

    • 堆的**操作 ** :

    • | 操作 | 说明 |
      | -------- | :----------------: |
      | addElement |将给定元素添加到该堆中 |
      | removeMin |删除堆的最小元素 |
      | findMin |返回一个指向堆中最小元素的引用 |

    • 12.1.1 addElement操作:

    • 将给定的元素添加至适当位置,并维持好该堆的完全性和有序性

    • 对于堆而言,因为其是一棵完全二叉树,所以在插入时会保持其完全性,所以对于新插入的结点来说,只存在一个正确的位置:要么其为h层左边的下一个空位置,要么其为h+1层左边的第一个位置。

    • 12.1.2 removeMin操作:

    • 删除堆的最小元素并返回;

    • 用最末端的叶子替代根;

    • 重构堆。

    • 12.1.3 findMin操作:

    • 堆的根处存储的是堆中的最小元素,因此只需返回其即可。

    • 12.2 使用堆:优先级队列

    • 优先级队列(priority queue) 和通常的栈和队列一样,但里面的每一个元素都有一个优先级 ,在处理的时候,首先处理优先级最高的。如果两个元素具有相同的优先级,则按照他们插入到队列中的先后顺序处理。

    • 虽然堆并非一个队列,但其提供了一个高效 的优先级队列实现。

    • 12.3 使用链表实现堆

    • 为能向上遍历树,每个结点存储了指向双亲的指针。

    • 12.3.1 addElement操作:

    • 在恰当位置添加一个新元素

    • 对堆进行重排序以维持其排序属性

    • lastNode指针重新设定为指向最新的最末结点

    • 时间复杂度O(log n)

    • 12.3.2 removeMin操作:

    • 用存储在最末结点处的元素替换存储在根处的元素

    • 对堆进行重排序

    • 返回初始根元素

    • 时间复杂度O(log n)

    • 12.3.3 findMin操作:

    • 返回指向存储在堆根处元素的引用

    • 时间复杂度为O(1)

    • 12.4 使用数组实现堆

    • 树根位于位置0处;

    • 左孩子位于2n+1处

    • 右孩子位于2(n+1)处

    • 12.4.1 addElement操作:

    • 在恰当位置添加一个新元素

    • 对堆进行重排序以维持其排序属性

    • count递增加1

    • 时间复杂度O(log n)

    • 12.4.2 removeMin操作:

    • 用存储在最末结点处的元素替换存储在根处的元素

    • 对堆进行重排序

    • 返回初始根元素

    • 时间复杂度O(log n)

    • 12.4.3 findMin操作:

    • 返回指向存储在堆根处元素的引用(该引用指向存储在堆的根处或数组位置0处的元素)

    • 时间复杂度为O(1)

    • 12.5 使用堆:堆排序

    • 添加列表中的每个元素

    • 一次删除一个元素

    • 时间复杂度为O(n log n)

    返回目录


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

    • 问题1:2-3-4树?
    • 解决:

    返回目录


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

    • 问题1:如何删除某一指定结点的子树。

    • 解决:

    返回目录


    代码托管

    返回目录


    上周考试错题总结

    • 错题1:上周无任何错题。
    • 解决:
    • 错题2:
    • 解决:
    • 错题3:
    • 解决:

    返回目录


    结对及互评

    点评过的同学博客和代码

    • 本周结对学习情况
      • 20172316赵乾宸
      • 博客中值得学习的或存在问题:
      • 20172329王文彬
      • **博客中值得学习的或存在问题: **
      • 博客内容充实、排版整齐、对教材内容有经过一番认真思考、继续保持。
      • 代码截图做标注时应尽量避免遮挡代码。
      • Markdown的部分缩进有误。
      • 教材问题2提出得很好,可以看出近断时间来反复使用链表、数组去实现同一类型的数据结构起得了一定的成效。

    返回目录


    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
    目标 3000行 15篇 300小时
    第一周 0/0 1/1 12/12
    第二周 935/935 1/2 24/36
    第三周 849/1784 1/3 34/70
    第四周 3600/5384 1/5 50/120
    第五周 2254/7638 1/7 50/170
    第六周 2809/10447 1/9 45/215
    第七周 3700/14147 1/10 40/255
    第八周 3422/17569 1/11 36/291

    返回目录


    参考资料

  • 相关阅读:
    结对项目——电子书的字段
    痛点分析
    文本统计——字符 单词 行数
    音乐播放器需求分析
    简单的四则运算
    高德地图——一款功能强大的APP
    记一次mysql小版本升级
    Servlet/JSP面试题目-----近期总结
    【转】各种概念POJO、JAVABEAN、DAO、DTO、PO、VO、BO、SSH、EJB
    springMVC框架(二)---springMVC框架高级开发
  • 原文地址:https://www.cnblogs.com/Tangcaiming/p/9940677.html
Copyright © 2011-2022 走看看