赞
踩
目录
(1)比如说医生根据病情安排手术排期,对于病情相同的情况先来先排,如果有病情较重的,就优先安排手术
(2)对于电脑的操作系统的任务调度来说,系统的任务优先级一般都比普通的应用优先级高
PriorityQueue(优先级队列主要体现出数据动态化,以及根据要求动态出队)
优先级队列:按照优先级大小动态出队(动态指的是元素的个数动态变化,而非固定)
普通队列:FIFO按照元素的入队顺序,先入先出
(1)二叉堆时一颗完全二叉树,基于数组的存储
(2)关于节点值
堆的根节点值>=子树的节点值(最大堆,大根堆)
注意:节点的层次和节点的大小没有任何关系,只能保证当前树中,树根是最大值
堆的根节点值<=子树的节点值(最小堆,小根堆)
(3)因为堆时基于数组存储的,节点之间的下标通过数组的下标来表示
假设某个节点的编号为I:
父节点的编号为parent=(i-1)/2
左子树节点编号为left=2 乘 i +1
右子树节点编号为right=2 乘 i +2
- package priority_queue;
-
- import java.util.ArrayList;
- import java.util.List;
-
- /**
- * 基于动态数组实现的最大堆
- */
- public class MaxHeap {
- //实际存储元素的数组
- private List<Integer> elementData;
- //当前堆中的元素个数
- private int size;
-
- public MaxHeap(){
- this(10);
- }
-
- public MaxHeap(int size) {
- elementData = new ArrayList<>();
- }
-
- /**
- * 找到当前节点的父节点的索引
- * @param k
- * @return
- */
- public int parentnode(int k){
- return (k-1)/2;
- }
-
- /**
- * 找到当前节点的左子树节点索引
- * @param k
- * @return
- */

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。