20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结
Posted amberr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结相关的知识,希望对你有一定的参考价值。
20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结
教材学习内容总结
堆
- 具有两个附加属性的二叉树:
- 是一颗完全树
- 对每一结点,它小于或等于其左孩子和右孩子(最小堆)
- 最大堆的结点大于或等于它的左右孩子
- 最小堆将其最小元素存储在该二叉树的根处,其根的两个孩子同样也是最小堆
操作 | 说明 |
---|---|
addElement | 将给定元素添加到该堆中 |
removeMin | 删除堆的最小元素 |
findMin | 返回一个指向堆中的最小元素的引用 |
- addElement操作
- 要求插入元素是可比较的
- 维持该堆的完全性属性和有序属性,插入的元素位置只存在一个正确的位置,要不然在h层左边的下一个空位置,要不然在h+1层左边的第一个位置。
- 添加之后进行排序(过程名叫筛选)
- 在堆实现中,会对最末一片叶子进行跟踪记录。
- removeMin操作
- 对于最小堆来说,Min就是根的位置的元素
- 维持该堆的完全性,能替换根的合法元素只有一个就是最末一片叶子上存储的元素。
- 删除之后进行排序(过程名叫筛选)
- findMin操作:
- 最小堆中的最小元素存储在根中,所以只需要返回存储在根中的元素。
使用堆:优先级队列
- 两个规则:
- 具有更高优先级的项排在前面。(不是FIFO)
- 具有相同优先级的项按先进先出的规则排列。(FIFO)
- 解决方案:
- 使用队列列表
- 使用最小堆。
//要先解决对相同优先级的进行先进先出的排序
//创建一个PriorityQueueNode对象,存储将被放置在队列中的元素,该元素的优先级,以及元素放进队列的顺序
public PrioritizedObject(T element, int priority)
{
this.element = element;//元素
this.priority = priority;//优先级
arrivalOrder = nextOrder;//放入队列的顺序
nextOrder++;
}
//再解决优先级相同时的比较
//为PriorityQueueNode类定义一个CompareTo方法,来完成优先级相同时的比较
public int compareTo(PrioritizedObject obj)
{
int result;
if (priority > obj.getPriority())
result = 1;
else if (priority < obj.getPriority())
result = -1;
else if (arrivalOrder > obj.getArrivalOrder())
result = 1;
else
result = -1;
return result;
}
以上是关于20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结的主要内容,如果未能解决你的问题,请参考以下文章
20172324 2018-2019-1 《程序设计与数据结构》第一周学习总结
20172324 2018-2019-1 《程序设计与数据结构》第二周学习总结
20172324 2018-2019-1 《程序设计与数据结构》第八周学习总结