堆和優先隊列

堆又稱為優先隊列,其通常包括至少兩種操作:入隊操作和出隊操作。

普通隊列與優先隊列

普通隊列:先進先出,后進后出
優先隊列:出隊序列和入對序列無關,只與優先級有關


為什么選擇優先隊列?

動態的選擇優先級最高的任務執行
在N個元素中選出前M個元素
排序的時間復雜度為O(NlogN)
使用優先隊列時間復雜度為O(NlogM)
當N的較大,M較小的時候,使用優先隊列比較快

優先隊列的實現
類型 入隊 出隊
普通數組 O(1) O(n)
順序數組 O(n) O(1)
O(lgn) O(lgn)

采用普通數組,依次入隊,選擇出隊
順序數組,排列入隊
堆,平衡入隊與出隊的時間,使其保持在O(lgn)
采用普通數組,最差的情況為O(n^2)

完全二叉樹

葉節點只能出現在最下層和次下層,并且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹。

二叉堆

二叉堆是一種特殊的堆,二叉堆是完全二元樹(二叉樹)或者是近似完全二元樹(二叉樹)。二叉堆有兩種:最大堆和最小堆。最大堆:父結點的鍵值總是大于或等于任何一個子節點的鍵值;最小堆:父結點的鍵值總是小于或等于任何一個子節點的鍵值。

二叉堆滿足二個特性:

1.父結點的鍵值總是大于或等于(小于或等于)任何一個子節點的鍵值。
2.每個結點的左子樹和右子樹都是一個二叉堆(都是最大堆或最小堆)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容