優先佇列(堆)淺談
阿新 • • 發佈:2019-02-09
1、概述
在分析堆之前,你可以理解一下佇列和棧,其實他們都是對任務的一種排程策略,只是各自的準則不同罷了,佇列為先進先出,棧為先進後出,而堆是每個任務分配了一個優先權,根據優先權進行任務的執行。排程程式通過堆始終能獲取優先權最高的任務進行執行。比較常見應用為作業系統。2、模型
堆又稱為優先佇列,其通常包括至少兩種操作:insert(入隊操作)和deleteMin(出隊操作)。3、實現方式
a.連結串列實現
簡單鏈表的實現過程為在連結串列的頭insert元素,使用O(1)時間完成,每次deleteMin元素,查找出連結串列中最小的元素,花費O(N)時間完成;另外一種方法是讓連結串列保持有序狀態,在進行任務insert的時候進行排序(花費O(N)),每次獲取連結串列的頭(花費O(1))。
b.二叉查詢樹實現
使用二叉查詢樹實現中,對於insert和deleteMin花費時間均為O(log(N)),但存在一個潛在問題,既是容易造成不平衡二叉樹,因為deleteMin始終是從左邊開始往右邊進行刪除。