Java優(yōu)先隊(duì)列?priority?queue
1.優(yōu)先隊(duì)列概念
優(yōu)先隊(duì)列(priority queue)是一種特殊的數(shù)據(jù)結(jié)構(gòu)。
隊(duì)列中每一個元素都被分配到一個優(yōu)先權(quán)值,出隊(duì)順序按照優(yōu)先權(quán)值來劃分。
一般有兩種出隊(duì)順序:高優(yōu)先權(quán)出隊(duì)或低優(yōu)先權(quán)出隊(duì)。priority queue至少要有兩個最基本的ADT:進(jìn)隊(duì),出隊(duì)(按照高優(yōu)先權(quán)或低優(yōu)先權(quán))
產(chǎn)生原因:同樣是為了提高數(shù)據(jù)處理的效率。試想,要實(shí)現(xiàn)優(yōu)先隊(duì)列對應(yīng)的功能,若使用鏈表或者數(shù)組,那么要么先排序再插入,要么先插入再查找最大最小元素。這樣一來,入隊(duì)出隊(duì)的時間復(fù)雜度至少為O(N)。
- 優(yōu)先隊(duì)列出隊(duì)和入隊(duì)的時間復(fù)雜度均為O(log N)。
- 優(yōu)先隊(duì)列基于二叉堆實(shí)現(xiàn)。
2.二叉堆(Heap)
堆是一種特殊的二叉樹,性質(zhì)如下:
- 每個結(jié)點(diǎn)的值都大于或等于其左右孩子結(jié)點(diǎn)的值(大頂堆),或每個結(jié)點(diǎn)的值都小宇或等于其左右孩子的值(小頂堆)。
- 必須滿足完全二叉樹的結(jié)構(gòu)。
完全二叉樹和滿二叉樹
完全二叉樹 complete binary tree
葉節(jié)點(diǎn)只可能出現(xiàn)在最后兩層,且最后一層的葉節(jié)點(diǎn)都左對齊
一棵深度為h的完全二叉樹

滿二叉樹 full binary tree
深度為h的滿二叉樹有(2^h)-1個結(jié)點(diǎn)

由二叉堆的定義可以看出,跟結(jié)點(diǎn)一定是二叉堆中結(jié)點(diǎn)值最大(或最小)的。較大(或較?。┑慕Y(jié)點(diǎn)靠近根節(jié)點(diǎn)
堆的存儲結(jié)構(gòu):
一般情況下,堆用數(shù)組來存儲,第i個結(jié)點(diǎn)的父節(jié)點(diǎn)的下標(biāo)就是(i-1)/2.
如果用層序遍歷順序?qū)⒋箜敹押托№敹汛嫒霐?shù)組,
則關(guān)系如圖:

堆的重要操作
插入:插入一個元素之后,新元素首先被插入表層(即最后一層盡可能左邊的位置),之后再根據(jù)堆的性質(zhì)進(jìn)行調(diào)整。
例:寫出一次一個地將10,12,1,14,6,5,8,15,3,9,7,4,11,13和2插入一個初始為空的二叉堆的結(jié)果


刪除:刪除總是發(fā)生在根處,之后將最后一個元素(即最后一層最右邊的元素)拿來填補(bǔ)空缺,之后根據(jù)堆的性質(zhì)進(jìn)行調(diào)整堆的結(jié)構(gòu)。
到此這篇關(guān)于Java優(yōu)先隊(duì)列 priority queue的文章就介紹到這了,更多相關(guān)優(yōu)先隊(duì)列 priority queue內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java數(shù)據(jù)結(jié)構(gòu)之堆(優(yōu)先隊(duì)列)的實(shí)現(xiàn)
- java數(shù)據(jù)結(jié)構(gòu)-堆實(shí)現(xiàn)優(yōu)先隊(duì)列
- Java優(yōu)先隊(duì)列(PriorityQueue)重寫compare操作
- java優(yōu)先隊(duì)列PriorityQueue中Comparator的用法詳解
- Java的優(yōu)先隊(duì)列PriorityQueue原理及實(shí)例分析
- Java基于堆結(jié)構(gòu)實(shí)現(xiàn)優(yōu)先隊(duì)列功能示例
- java編程實(shí)現(xiàn)優(yōu)先隊(duì)列的二叉堆代碼分享
- Java數(shù)據(jù)結(jié)構(gòu)優(yōu)先隊(duì)列實(shí)練
相關(guān)文章
Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決
本文主要介紹了Mybatis-Plus中IdType.AUTO局部配置不生效的問題解決,數(shù)據(jù)庫插入數(shù)據(jù)時,id的默認(rèn)生成方式還是雪花算法,局部配置沒有生效,下面就來解決一下,感興趣的可以了解一下2023-09-09
如何使用MyBatis Plus實(shí)現(xiàn)數(shù)據(jù)庫curd操作
MyBatis-Plus是一個MyBatis 的增強(qiáng)工具,在MyBatis,的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生。 這篇文章主要介紹了MyBatis Plus實(shí)現(xiàn)數(shù)據(jù)庫curd操作,需要的朋友可以參考下2021-09-09
SpringBoot瘦身打包部署的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot瘦身打包部署的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
java學(xué)習(xí)指南之字符串與正則表達(dá)式
在日常Java后端開發(fā)過程中,免不了對數(shù)據(jù)字段的解析,自然就少不了對字符串的操作,這其中就包含了正則表達(dá)式這一塊的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于java學(xué)習(xí)指南之字符串與正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下2023-05-05
基于SpringBoot構(gòu)建電商秒殺項(xiàng)目代碼實(shí)例
這篇文章主要介紹了基于SpringBoot構(gòu)建電商秒殺項(xiàng)目代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
IDEA連接MySQL提示serverTimezone的問題及解決方法
很多朋友私聊小編,使用IDEA軟件連接MySQL數(shù)據(jù)庫時總是提示Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.的錯誤,小編就不一一回復(fù)大家了,下面小編把我的解決方法分享到腳本之家平臺,需要的朋友參考下吧2021-05-05

