# 20172320 2018-2019-1 《Java程序设计》第八周学习总结
Posted garolwz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# 20172320 2018-2019-1 《Java程序设计》第八周学习总结相关的知识,希望对你有一定的参考价值。
20172320 2018-2019-1 《Java程序设计》第八周学习总结
教材学习内容总结
- 堆是一颗完全二叉树,分为最大堆(大顶堆)和最小堆(小顶堆);最小堆将其最小元素存储在二叉树的根处,其中每一个结点都小于或等于他的两个孩子;最大堆将其最大的元素存储在二叉树的根处,其中的结点都大于或等于他的左右孩子
- 最小堆的最小元素存储在该二叉树的根处,且其根的两个孩子同样也是最小堆;最大堆同理
- 堆得操作
操作 | 说明 |
---|---|
addElement | 将给定元素添加到该堆中 |
removeMin | 删除堆得最小元素 |
findMin | 返回一个指向堆中最小元素的引用 |
addElement方法将给定元素添加到堆中的适当位置中,且维持该堆的完全性属性和有序属性;插入位置要么在h层左边的下一个位置,要么是h+1层左边的第一个位置
···
public void addElement(T obj)
{
if (count == tree.length)
expandCapacity();tree[count] = obj; count++; modCount++; if (count > 1) heapifyAdd();
}
···removeMin方法将删除最小堆中的最小元素并返回它,由于最小元素在最小堆的根处,所以要用堆中的另一个元素代替它为维持该树的完全性,只有一个能替换的合法元素,且它是存储在树中最末一片叶子上的元素。最末一片叶子中的元素被移到了根处,必须对该堆进行重排序以维持排序属性
···
public T removeMin() throws EmptyCollectionException
{
if (isEmpty())
throw new EmptyCollectionException("ArrayHeap");
}T minElement = tree[0]; tree[0] = tree[count-1]; heapifyRemove(); count--; modCount--; return minElement;
···- 优先级队列:具有更高优先级的项目在先,具有相同优先级的项目使用先进先出方法来确定优先级;最小堆不是队列,但却提供了一个高效的优先级队列实现
- 因为我们要求在插入元素后能够向上遍历该树,所以堆中结点必须存储指向双亲的指针
- 在二叉树的数组实现中,树的跟位于0处,对于每一结点n,n的左孩子将位于数组的2n+1位置处,n的右孩子将位于数组的2(n+1)位置处
链表和数组实现的addElement和removeMin操作时间复杂度为O(log n)
教材中遇到的问题和解决过程‘
- 问题1:优先级队列的优先级怎么确定?堆怎么提供一个高效的优先级队列实现?
- 解决方案:优先级的具体的优先比较算法由实现PriorityQueue接口的程序员来决定;由于堆的添加元素与删除元素时都会破坏堆结构,所以添加与删除进都要进行结构调整,优先级队列添加元素时会按照优先级添加,出队时从第一个开始,也就是最小堆的根元素(最小元素),这样就保证了具有更高优先级的项目在先,所以说最小堆提供了一个高效的优先级队列实现。
代码调试中的问题和解决过程
无
托管代码
上周考试错题总结
- A minheap stores its smallest element at the ________ of the binary tree.
A .leaf
B .internal node
C .root
D .sibling
分析:C
最小堆的将最小元素出存储在二叉树的根处 - Both children of the root of a minheap are _________.
A .Minheaps
B .Maxheaps
C .Heaps
D .Binary search trees
分析:A
最小堆的最小元素存储在该二叉树的根处,且其根的两个孩子同样也是最小堆 - To maintain the completeness of the tree, there is only one valid element to replace the ________, and that is the element stored in the last leaf in the tree.
A .root
B .internal node
C .leaf
D .tree
分析:A
为了保持树的完整性,需要一个元素来替代根的元素 - 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
最小堆的最小元素存储在该二叉树的根处,且其根的两个孩子同样也是最小堆 - Typically, in heap implementations, we keep track of the position of the last node or, more precisely, the last leaf in the tree.
A .True
B .Flase
分析:A
通常,在堆实现中,我们跟踪最后一个节点的位置,或者更准确地说,跟踪树中的最后一片叶子 结对及互评
点评过的同学博客和代码
- 本周结对学习情况
20172327 - 结对学习内容
?阅读第12章节,运行教材上的代码
?完成程序设计项目PP12.1、PP12.8、PP12.9
?完成课后自测题,并参考答案学习
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/4 | 20/20 | |
第二周 | 328/328 | 1/5 | 20/40 | |
第三周 | 1597/ 1925 | 1/4 | 20/60 | |
第四周 | 1153/3850 | 1/5 | 20/80 | |
第五周 | 1583/5433 | 1/6 | 20/100 | |
第六周 | 1515/6948 | 1/7 | 20/120 | |
第七周 | 1145/8093 | 1/8 | 20/140 | |
第八周 | 1665/9758 | 1/9 | 20/160 |
参考资料
以上是关于# 20172320 2018-2019-1 《Java程序设计》第八周学习总结的主要内容,如果未能解决你的问题,请参考以下文章
# 20172320 2018-2019-1 《Java程序设计》第八周学习总结
20172320 2017-2018-2 《程序设计与数据结构》实验四报告
20172320 2017-2018-2 《程序设计与数据结构》实验五报告