概念:
堆(Heap)亦被稱為:優(yōu)先隊列(priority queue)
Binary Heap is a common type of Heap.
性質:堆的實現(xiàn)通過構造二叉堆(binary heap),這種數(shù)據(jù)結構具有以下性質
1.任意節(jié)點小于等于它的所有后裔靠欢,最小元素在堆的根上(堆序性)各拷。
2.堆總是一棵完全樹算灸。complete tree,在node數(shù)量相同的情況下,完全樹高度最小height肯定是lgn粗仓,traversal或其他操作復雜度更低,普通的二叉樹則沒有這種優(yōu)勢蜀踏。
3.將根節(jié)點最大的堆叫做MAX HEAP, 根節(jié)點最小的堆叫做最小堆MIN HEAP
4.index of IChild = index of parent * 2+1
5.index of rChild = index of parent * 2+2
(第4第5的特性決定了二叉堆可以將所有的node放到一個數(shù)組中可以快速地找到某個node的子node)
6.unsorted but follow rules above
java PriorityQueue支持的基本操作
Queue<Integer> pq = new PriorityQueue<>();
pq.offer(6);
pq.offer(5);
pq.offer(4);//復雜度O(lgn) 插入到heap的最后一個index膘壶,再跟parent節(jié)點比較,比parent小就往上冒泡
System.out.println(pq.peek());//4 O(1)
System.out.println(pq.poll());//4
System.out.println(pq.poll());//5
//pq.poll() 復雜度O(lgn) 刪除第一個index剂邮,再將最后一個元素移到頂部摇幻,再往下壓與較小的子節(jié)點交換,直到?jīng)]有比它小的節(jié)點
練習
`1.find smallest k elements from an unsorted array of size n
solution1: maintain a MAX-Heap of size k