priorityQueue 堆

priorityQueue 通過add方法添加,通過poll方法一次獲得一個最小元素(元素需要實現Comparable或提供Comparator的實現類),實現原理最小堆,也就是說元素按照最小堆結構存放。

最小堆是一個完全二叉樹結構(滿足第i個節點的左child索引是2i+1,右child索引是2i+2,父節點爲i-1/2),且父節點小於左右兩個子節點。

一開始如果有一些數據則需要構建最小堆結構,可參看priorityQueue類的heapify方法

提取最小元素後需要重建最小堆結構,用數組最後一個元素代替第一個元素,然後進行最小堆結構調整,參看siftDown方法

添加元素時,將改元素放到數組最後一個元素,然後進行最小堆結構調整,參看siftUp方法

至於裏有最小堆排序,第一步構建一個最小堆,則數組的第一個元素是最小元素,然後使之與最後一個元素互換位置,則最後一個元素爲最小元素,然後排除最後一個元素,使用第一個到倒數第二個元素進行最小堆結構調整,得到第一個元素是最小元素,然後使之與倒數第二個元素互換,然後再排除倒數第二個元素,用第一元素到倒數第三個元素構建最小堆,如此循環,最後該數組是就是降序排列了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章