2018-2019-20172329 《Java软件结构与数据结构》第八周学习总结

2018-2019-20172329 《Java软件结构与数据结构》第八周学习总结

现在对于我而言,最珍贵的是时间,感觉自己在时间飞逝的时候真的挽留不住什么,只能怒发冲冠的让自己疯狂的学习啦,新的一周要加油!??

教材学习内容总结

《Java软件结构与数据结构》第十二章-优先队列与堆

一、概述

  • 1、什么是堆:

    • 堆就是具有两个附加属性的一个二叉树。
    • 堆分为小顶堆和大顶堆。
    • 两个附加属性如下:
      • (1)它是一颗完全树。(完全树:如果某树是平衡的,且底层所有叶子都位于树的左边,则认为该树是完全的。
      • (2)对每个结点,它(小于/大于)或等于其左孩子和右孩子。(ps:小于为小顶堆,大于为大顶堆)
    • 小顶堆将其最小元素存储在该二叉树的根处,且其根的两个孩子同样也是小顶堆。
  • 2、堆的操作简历:
操作 描述
addElement 将给定元素添加到该堆中
removeMin/removeMax 删除堆的最小元素/最大元素
findMin/findMax 返回一个指向堆中的最小元素/最大元素的引用
  • 3、堆的具体操作

    • addElement操作:

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

    • 插入的调整过程:
    • 如图
    • removeMin操作:
      • (1)该方法将删除最小堆中的最小元素并返回它。
      • (2)由于最小元素是存储在最小堆的根处,所以我们需要返回存储在根处的元素并用堆中的另一个元素替换它。
      • (3)要维持该树的完全性,那么只有一个能替换根的合法元素,且它是存储在树中最末一片叶子上的元素。
    • 如图
    • findMin操作
      • (1)该方法将返回一个指向该最小堆中最小元素的引用。
      • (2)由于该元素总是被存储在该树的根处,所以实现这一方法只需通过返回存储在根处的元素即可。
  • 4、优先队列是什么
    • 优先队列是允许至少下列两种操作的数据结构

      • (1)insert(插入),它的作用是显而易见的;
      • (2)deleteMin(删除最小者),它的工作是找出、返回并删除优先队列中最小的元素。
    • insert等价于enqueue(入队),而deleteMin则是队列运算中dequeue(出队)在优先队列中的等价操作。
    • 如图
    • 1、优先队列具有更高的优先级的项目在先。
    • 2、具有相同优先级的项目使用先进先出来确定其排序。
    • 3、虽然小顶堆根本不是一个队列,但是它提供了一个高效的优先级队列实现。
    • 4、优先队列没有back()操作!!!!!
      二、用链表实现堆
  • 1、addElement操作
    • 过程:

      • (1)在恰当的位置处添加一个新元素,对堆进行重排序以维持其排序属性。
      • (2)将lastnode指针重新设定为指向新的最末结点。
  • 2、removeMin操作
    • 过程:

      • (1)用存储在最末结点处的元素替换存储在根处的元素,对堆进行重排序,以及返回初始的根元素。
      • (2)链表实现的removeMin方法必须删除根元素,并用来自最末结点替换它。
      • (3)该操作的最后的时间复杂度为O(log n)
  • 3、 findMin操作
    • 过程:

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

三、用数组实现堆

  • 1、概念点

    • 注:在二叉树的数组实现中,树的根位于位置0处,对于每一结点n,n的左孩子将位于数组2n+1位置处,n的右孩子将位于数组的2(n+1)位置处。
  • 2、addElement操作
    • 注:链表实现和数组实现的addElement方法的时间复杂度同为O(log n)
  • 3、removeMin操作
    • 注:链表实现和数组实现的removeMin方法的时间复杂度同为O(log n)
  • 4、 findMin操作
    • 注:该方法仅仅返回一个指向存储在堆根元素的引用,因此复杂度为O(1)。

四、其他

  • 1、heapSort方法的两部分构成:

    • (1)添加列表的每一个元素
    • (2)一次删除一个元素
  • 2、堆排序的复杂度为O(n log n)

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

  • 问题1:在堆的删除和插入操作后进行调整的时候,如何去判断哪一个元素需要被交换
  • 问题1解决方案:
  • (1)现在的任务是将一个不符合大小顶堆的堆让它变得符合标准。
  • (2)我们要进行筛选操作:
    • 1、调整过程中,总是将根结点(被调整结点)与左右孩子比较
    • 2、不满足堆条件时,将根结点与左右孩子中较大者交换
    • 3、这个调整过程一直进行到所有子树都是堆或者交换到叶子为止
  • 问题2:堆排序是如何进行的
  • 问题2解决方案:
  • 步骤:
    • (1)将关键字序列排成完全二叉树形式;
    • (2)从无序序列的第n/2个元素开始(对应于完全二叉树的最后一个非终端结点)进行筛选(筛选可以参考问题1解决方案)
  • 图示:

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

  • 问题1:在进行测试的时候,在输出的时候会出现删除以后多一个元素的现象
  • 问题1解决方案:
    (1)首先,我先测试了问题到底出现在哪里,通过调用删除方法,我发现总有一个现象就是会让最后一个元素给替代第一个的位置,所以我就锁定了一行代码tree[0] = tree[count-1];也大致确定了问题也应该源于此,所以需要修改。
    (2)我运用之前用数组实现队列的思想,用了如下的方法解决问题。
        for (int i =0;i<count-1;i++){
            tree[i]=tree[i+1];
        }

(3)同时这个问题也可以解决发生在pp12.1在写队列的出列的操作中所发生的问题。

上周考试错题总结

  • 错题1:
    The Java Collections API provides two implementations of balanced binary search trees, TreeSet and TreeMap, both of which use a ___________tree implementation.
    A .AVL
    B .red/black
    C .binary search
    D .None of the above

      正确答案: B  我的答案: C

解析:当时我认为既然接口是查找树,则这两个也应该是查找树的方法。

  • 错题2:
    A minheap stores its largest element at the root of the binary tree, and both children of the root of a minheap are also minheaps.
    A .True
    B .Flase

      正确答案: B  你的答案: A

解析:眼瞎看错题目了,顶应该是最小

代码托管

结对及互评

  • 本周结对学习情况

    • 20172316赵乾宸
  • 博客中值得学习的或问题:
    • 内容详略得当;
    • 代码调试环节比较详细;
  • 基于评分标准,我给本博客打分:5分。得分情况如下:
  1. 正确使用Markdown语法(加1分):
  2. 模板中的要素齐全(加1分)
  3. 教材学习中的问题和解决过程, 一个问题加1分
  4. 代码调试中的问题和解决过程, 一个问题加1分
    • 20172316唐才铭
  • 博客中值得学习的或问题:

    • 内容详略得当;
    • 代码调试环节比较详细;
  • 基于评分标准,我给本博客打分:9分。得分情况如下:
  1. 正确使用Markdown语法(加1分):
  2. 模板中的要素齐全(加1分)
  3. 教材学习中的问题和解决过程, 一个问题加1分
  4. 代码调试中的问题和解决过程, 一个问题加1分

感悟

本周觉得自己愈发忙碌了起来,感觉时间真的越来越不够用了,和老师也聊了聊,的确上大学上成这个样子可能也是haiok,老师说现在上大学累成够=狗说明就对了,我觉得的确,像在大学这样一个时间由自己支配的阶段,我觉得只要自己有心,肯定就可以找到更多的事情自己去做,因为正因为有大学这个平台,让我们可以学习到更多有利于自己今后发展技能,让自己将来可以在社会中有立足之地。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 0/0 1/1 6/6
第二周 1313/1313 1/2 20/26
第三周 901/2214 1/3 20/46
第四周 3635/5849 2/4 20/66
第五周 1525/7374 1/5 20/86
第六周 1542/8869 2/5 25/111
第七周 1391/10260 1/6 20/131
第八周 4379/14639 2/8 25/156

参考资料

蓝墨云班课
Java程序设计
优先队列总结

原文地址:https://www.cnblogs.com/qh45wangwenbin/p/9936942.html

时间: 2024-09-30 11:02:31

2018-2019-20172329 《Java软件结构与数据结构》第八周学习总结的相关文章

20172305 2018-2019-1 《Java软件结构与数据结构》第一周学习总结

20172305 2018-2019-1 <Java软件结构与数据结构>第一周学习总结 教材学习内容总结 本周内容主要为书第一章和第二章的内容: 第一章 软件质量: 正确性(软件达到特定需求的程度) 可靠性(软件发生故障的频率和危害程度) 健壮性(很好处理错误情况的情况) 可用性(用户在软件中掌握和运行任务的容易程度) 可维护性(软件进行修改的容易程度) 可重用性(软件组件可被其他软件系统开发使用的容易程度) 可移植性(软件组成可用于多种计算机环境中的容易程度) 运行效率(不浪费资源的情况下软

2018-2019-20172321 《Java软件结构与数据结构》第九周学习总结

2018-2019-20172321 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 第15章 图 无向图 图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: 边由连接的顶点对来表示,如:(A,B),(C,D),表示两顶点之间有一条边. 无向图:与树类似,图也由结点和这些结点之间的连接构成.这些结点是顶点,而结点之间的链接是边.无向图是一种边为无序结点对的图.于是,记做(A,B)的边就意味着A与B之间有一条从两个方向都可以游历的连接.边记作(A,B)和记作(B,A

杨玲 201771010133《面向对象程序设计(java)》第十八周学习总结

 <面向对象程序设计(java)>第十八周学习总结 第一部分:理论知识学习部分 第二部分:实验部分 实验名称:实验十八  总复习 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编

20172306 2018-2019 《Java程序设计与数据结构》第一周学习总结

20172306 2018-2019 <Java程序设计与数据结构(下)>第一周学习总结 教材学习内容总结 第一章 概述 (程序=数据结构+算法 软件=程序+软件工程) 1.1 软件质量 软件工程师一门关于高质量软件开发的技术和理论的学科 软件工程的目标:1.解决正确性问题 2.按时且在预算之内给出解决方案 3.给出高质量的解决方案 4.以合情合理的方式完成上面的事情 高质量软件的特征 正确性:我认为是我们所做的都是为了解决一个正确性问题. 可靠性:降低软件的故障程度和概率 健壮性:可以很好地

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

20172306<Java程序设计>第九周学习总结 教材学习内容总结 第十一章: try-catch语句.其中还有finally语句.try是进行某些操作,catch是捕获异常,并通过某些异常来进行某些操作.finally是无论是否有异常都会进行的语句.可以没有catch语句. 异常的传递.我觉得传递,主要是某地方的异常是由其他的方法引起的,异常就会传递到那个方法上.书中的例子可以很好的表现出来. IO异常.书中的内容主要是围绕异常来写.老师在蓝墨云中有写有关IO更为详细的内容.例如创建文件,

201671010118 2016-2017-2《Java程序设计》 第十八周学习心得

已经是第十八周的java学习了,马上面临期末考试了,立马又要进行紧张的复习状态了,感觉也没有做好准备,打算在这周认真复习,好好备战期末考试,在这学期的java学习中,遇到了很多困难也解决了很多,重点的四五六章节内容感觉会有点遗忘,第十章十二章内容的掌握还可以,Swing用户界面组件掌握的不怎么好,在私下我想用更多的时间去努力学习这章内容,复习以前的内容. 这是最后一次的总结,一学期时间很快过去了,感谢代老师以及学长学姐的帮助,学习上一直在认真帮助我们,每周的作用业会认真的给我们批阅,特别感谢老师

20172302 《Java软件结构与数据结构》第四周学习总结

2018年学习总结博客总目录:第一周 第二周 第三周 第四周 教材学习内容总结 第六章 列表 1.列表是对象的有序集合,在 List 界面中定义. List 接口表示集合框架中的列表.列表可以具有重复的元素.并且我们可以在列表中存储多个空值. 2.列表集合 是一种概念性的表示方法,其思想是使事物以线性列表的方式进行组织,就像栈和队列一样,列表也可以使用数组和链表来实现.列表集合没有内在的容量大小,它可以随着需要而增大.列表集合更一般化,可以在列表的中间和末端添加和删除元素. 3.列表可以分为有序

20172308《Java软件结构与数据结构》第四周学习总结

教材学习内容总结 第 6 章 列表 一. 列表集合 列表集合:一种概念性表示法,思想是使事物以线性列表的方式进行组织 特点: 列表集合没有内在的容量大小,它可以随着需要而增大 列表集合更具一般化,可以在列表的中间和末端添加和删除元素 列表也可以使用链表或数组实现 类型: 有序列表:元素按照元素的某种内在特性进行排序 无序列表:元素间不具有内在顺序,元素按照它们在列表中的位置排序 索引列表:其元素可以用数字索引来引用(顺序由使用者决定) 二. Java API没有任何类能直接实现以上描述的有序列表

201771010126 王燕《面向对象程序设计(java)》第十八周学习总结

实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: 1 package pro

201771010135 杨蓉庆《面对对象程序设计(java)》第十八周学习总结

1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: (1) 用户信息输入界面如下图所示: 1)用户点击提交按钮时,用户输入信息显示