中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java優先隊列是怎樣的

發布時間:2021-12-27 15:14:26 來源:億速云 閱讀:319 作者:柒染 欄目:開發技術

Java優先隊列是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1.優先隊列概念

優先隊列(priority queue)是一種特殊的數據結構。
隊列中每一個元素都被分配到一個優先權值,出隊順序按照優先權值來劃分
一般有兩種出隊順序:高優先權出隊低優先權出隊
priority queue至少要有兩個最基本的ADT:進隊出隊(按照高優先權或低優先權)

產生原因:同樣是為了提高數據處理的效率。試想,要實現優先隊列對應的功能,若使用鏈表或者數組,那么要么先排序再插入,要么先插入再查找最大最小元素。這樣一來,入隊出隊的時間復雜度至少為O(N)。

  • 優先隊列出隊和入隊的時間復雜度均為O(log N)。

  • 優先隊列基于二叉堆實現。

2.二叉堆(Heap)

堆是一種特殊的二叉樹,性質如下:

  • 每個結點的值都大于或等于其左右孩子結點的值(大頂堆),或每個結點的值都小宇或等于其左右孩子的值(小頂堆)。

  • 必須滿足完全二叉樹的結構。

完全二叉樹和滿二叉樹

完全二叉樹 complete binary tree

葉節點只可能出現在最后兩層,且最后一層的葉節點都左對齊
一棵深度為h的完全二叉樹

Java優先隊列是怎樣的

滿二叉樹 full binary tree

深度為h的滿二叉樹有(2^h)-1個結點

Java優先隊列是怎樣的

由二叉堆的定義可以看出,跟結點一定是二叉堆中結點值最大(或最小)的。較大(或較小)的結點靠近根節點

堆的存儲結構:

一般情況下,堆用數組來存儲,第i個結點的父節點的下標就是(i-1)/2.
如果用層序遍歷順序將大頂堆和小頂堆存入數組,

則關系如圖:

Java優先隊列是怎樣的

堆的重要操作

插入:插入一個元素之后,新元素首先被插入表層(即最后一層盡可能左邊的位置),之后再根據堆的性質進行調整。

例:寫出一次一個地將10,12,1,14,6,5,8,15,3,9,7,4,11,13和2插入一個初始為空的二叉堆的結果

Java優先隊列是怎樣的Java優先隊列是怎樣的

刪除:刪除總是發生在根處,之后將最后一個元素(即最后一層最右邊的元素)拿來填補空缺,之后根據堆的性質進行調整堆的結構。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延津县| 青海省| 嘉峪关市| 赣州市| 武清区| 灯塔市| 佳木斯市| 西华县| 邵阳县| 德惠市| 博白县| 富蕴县| 宜章县| 峨边| 宿松县| 庄河市| 苏尼特右旗| 高平市| 桐庐县| 威信县| 金华市| 平陆县| 饶河县| 德保县| 克东县| 大竹县| 南部县| 台州市| 井研县| 崇礼县| 武隆县| 永兴县| 安岳县| 扎鲁特旗| 三明市| 衡南县| 竹北市| 庄浪县| 肥西县| 噶尔县| 丁青县|