zoukankan      html  css  js  c++  java
  • 20172325 2018-2019-2 《Java程序设计》第八周学习总结

    20172325 2018-2019-2 《Java程序设计》第八周学习总结

    教材学习内容总结

    一、堆

    1.什么是堆?

    • 具有两个附加属性的一个二叉树。
    • 堆分为小顶堆和大顶堆。
      最小堆:对每一结点,它小于或等于其左孩子和右孩子。

      最大堆:对每一结点,它大于或等于其左孩子和右孩子。
    • 两个附加属性如下:
      (1)它是一棵完全二叉树,即该树是平衡的,且底层所有叶子都位于树的左边。
      (2)对每个结点,它(小顶堆/大顶堆)或等于其左孩子和右孩子。
    • 最小堆将其最小元素存储在该二叉树的根处,且其根的两个孩子同样也是最小堆。

    2.操作

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

    **addElement操作: **
    (1)该方法将给定的元素添加到堆中的恰当位置处,且维持该队的完全性属性和有序属性。
    (2)因为一个堆就是一颗完全树,所以对于插入的新结点而言,只存在一个正确的位置,且要么是h层左边下层的下一个空位置,要么是h+1层左边的第1个位置(如果h层是满的话)

    removeMin操作:
    (1)该方法将删除最小堆中的最小元素并返回它。
    (2)由于最小元素是存储在最小堆的根处,所以我们需要返回存储在根处的元素并用堆中的另一个元素替换它。
    (3)要维持该树的完全性,那么只有一个能替换根的合法元素,且它是存储在树中最末一片叶子上的元素。

    findMin操作
    (1)该方法将返回一个指向该最小堆中最小元素的引用。
    (2)由于该元素总是被存储在该树的根处,所以实现这一方法只需通过返回存储在根处的元素即可。

    二、优先级队列

    • 优先队列是允许至少下列两种操作的数据结构
      (1)insert(插入),它的作用是显而易见的;
      (2)deleteMin(删除最小者),它的工作是找出、返回并删除优先队列中最小的元素。

    三、用链表实现堆

    addElement操作:

    • 在恰当的位置添加一个新元素
    • 对堆进行重排序以维持其排序属性
    • 将lastNode指针重新设定指向新的最末结点

    removeMin操作:

    • 用存储在最末结点处的元素替换存储在根处的元素
    • 对堆进行重排序
    • 返回原始的根元素

    **findMin操作: **

    • 该方法仅仅返回一个指向存储在堆根处元素的引用,因此复杂度为O(1)。

    四、用数组实现堆

    **addElement操作: **

    • 在恰当的位置添加一个新元素
    • 对堆进行重排序以维持其排序属性
    • 将count递增1.

    **removeMin操作: **

    • 用存储在最末结点处的元素替换存储在根处的元素
    • 对堆进行重排序
    • 返回原始的根元素

    **findMin操作: **

    • 返回指向存储在堆的根处或数组0位置处的元素。

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

    • 问题1:堆、栈、堆栈,傻傻分不清楚。
    • 问题1解决方案:

    堆、栈、堆栈,都是java中的储存结构。堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。堆栈其实堆栈本身就是栈,只是换了个抽象的名字。

    堆、栈区别总结:

    堆:在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。

    栈:是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需要的Stack的大小。

    • 1.堆栈空间分配

    ①栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
    ②堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

    • 2.堆栈缓存方式

    ①栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
    ②堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

    • 3.堆栈数据结构区别

    ①堆(数据结构):堆可以被看成是一棵树,如:堆排序。
    ②栈(数据结构):一种先进后出的数据结构。

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

    • 问题1:在运行程序是显示没有Romefist()方法,如下图

    • 问题1解决方案:首先,我检查了我的方法,发现在ListADT里面没有写入方法;之后,我补上了Romefist()方法,但是我发现这个问题并没有解决,也就是说我的这不仅仅是方法的问题,之后我问了赵晓海同学,他说是接口出现了问题,我采用了无序接口,然而我并没有听懂,最后我的解决方法是将这两个文件类复制了以后,删掉!删掉!删掉!然后关机,然后重启,然后打开IDEA,然后重新新建文件,然后粘贴,然后就没有然后了,呵!

    代码托管

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

    上周考试错题总结

    结对及互评

    点评过的同学博客和代码

    • 本周结对学习情况
      • 20172306
      • 结对学习内容
        • 第十一章内容
        • 讨论教材问题
        • 解决代码问题

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/1 20/20
    第二周 941/8481 1/2 18/20
    第三周 653/9134 1/3 22/20
    第四周 1728/4385 2/5 8/28
    第五周 933/5318 1/6 18/20
    第六周 1082/5877 1/7 20/18
    第七周 932/6721 1/8 18/18
    第八周 1023/8438 2/10 24/20

    参考资料

  • 相关阅读:
    算法设计和分析(Prim算法构建最小生成树)
    寒假第二阶段集训第6天
    2.4 综合训练
    1月18日 LCA专项训练
    易班易喵喵话题动态自动统计
    P2590 [ZJOI2008]树的统计
    P3038 [USACO11DEC]牧草种植Grass Planting
    2157: 旅游
    P2787 语文1(chin1)- 理理思维
    F. Make Them Similar
  • 原文地址:https://www.cnblogs.com/20172325DYK/p/9940981.html
Copyright © 2011-2022 走看看