日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

优先队列----堆

發布時間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优先队列----堆 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題

打印機打印作業一般是放在隊列中的。如果按照先來先打印的順序,有一個100頁的打印任務,那么會讓后面短小的任務等待很長時間。更合理的做法也許是最后處理最耗時的打印任務,不管它是不是最后提交上來的。
在多用戶操作系統中,操作系統讓哪個程序使用CPU,是需要決定從隊列里面選擇的。一般做法是從隊頭獲得程序,分配一定時間的時間片。如果執行完,從隊列刪除;如果沒有執行完,插入隊尾。這樣處理的缺點是:一些很短小的程序需要花很長的時間才能執行完;有些比較重要的程序,不一定短小需要提前執行。
因此如果隊列中的每個任務都有一個優先級,先執行優先級高的,就可以解決問題了。這樣的隊列稱為優先隊列(priority queue)。

優先隊列定義

優先隊列是要很小的代價完成插入和刪除最小元素,兩個操作的數據結構。

二叉堆

通常情況下的堆是指二叉堆。思路是每次插入都將最小元素(如果業務要求是找最小元素),放置在根節點,用O(logN)時間完成。可以用O(1)的時間獲得最小元素。刪除最小元素的時候除了返回最小元素的值,還將選取新的最小元素,用O(logN)的時間。

結構性質

二叉堆是一棵被完全填滿的二叉樹,有可能最底層元素不滿,底層上的元素從左到右。(關鍵詞:滿二叉樹、從左到右)

堆序性質

對最小堆而言:每一個節點X>父節點的值。最大堆相反。

操作

操作的時間復雜度小于O(logN)

insert

deleteMin

decreaseKey

increaseKey

delete

buildHeap

優先隊列應用

選擇問題

輸入N個元素,查找第k小元素。解決思路1:將N個元素build一棵最小二叉堆,刪除k次,得到第k小元素。解決思路2:前k個元素build一棵最大二叉堆,后面的每個元素讀入的時候,與這里的最大元素比較,如果比最大元素小,則替換。

事件模擬

d堆

堆的分叉是d個,不僅僅是2個。有效降低堆的高度。實際中多用4-堆。

左勢堆

二叉堆不能很方便的合并,所以提出了左式堆。左式堆是一個二叉堆。不同點是堆中每隔一節點X,左兒子的零路徑長>=右兒子的零路徑長,記為:nlp(left)>=nlp(right)。整棵樹向左偏。

特殊操作

merge

時間復雜度 O(logN)

斜堆

二項隊列

每次操作的最壞情形是O(logN),而插入操作平均花費常數時間。
一個二項隊列是堆序的樹的集合(簡單的說就是樹的集合)。二項隊列中每一個高度的樹只有一顆

這里有B0,B1,B2,B3,B4Bk=Bk?1Bk?1
高度為k的二項樹恰好有2k個節點。我們就可以用二項隊列表示任意一個優先隊列。這與二進制表示一個數相同。例如6,的二進制是1101,B0,B2,B3三棵樹可以表示容量為6的優先隊列。

代碼任務

1 二叉堆的實現
2 左勢堆的合并
3 二項隊列的實現

總結

以上是生活随笔為你收集整理的优先队列----堆的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。