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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

优先队列默认是小顶堆吗_一分钟带你读懂什么是堆?

發(fā)布時(shí)間:2025/3/8 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优先队列默认是小顶堆吗_一分钟带你读懂什么是堆? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

堆其實(shí)就是一種特殊的隊(duì)列——優(yōu)先隊(duì)列。
普通的隊(duì)列游戲規(guī)則很簡(jiǎn)單:就是先進(jìn)先出;但這種優(yōu)先隊(duì)列搞特殊,不是按照進(jìn)隊(duì)列的時(shí)間順序,而是按照每個(gè)元素的優(yōu)先級(jí)來比拼,優(yōu)先級(jí)高的在堆頂。
這也很容易理解吧,比如各種軟件都有會(huì)員制度,某軟件用了會(huì)員就能加速下載的,不同等級(jí)的會(huì)員速度還不一樣,那就是優(yōu)先級(jí)不同呀。
還有其實(shí)每個(gè)人回復(fù)微信消息也是默默的把消息放進(jìn)堆里排個(gè)序:先回男朋友女朋友的,然后再回其他人的。
這里要區(qū)別于操作系統(tǒng)里的那個(gè)“堆”,這兩個(gè)雖然都叫堆,但是沒有半毛錢關(guān)系,都是借用了 Heap 這個(gè)英文單詞而已。
我們?cè)賮砘仡櫼幌隆付选乖谡麄€(gè) Java 集合框架中的位置:

也就是說,

  • PriorityQueue 是一個(gè)類 (class);
  • PriorityQueue 繼承自 Queue 這個(gè)接口 (Interface);

那 heap 在哪呢?
heap 其實(shí)是一個(gè)抽象的數(shù)據(jù)結(jié)構(gòu),或者說是邏輯上的數(shù)據(jù)結(jié)構(gòu),并不是一個(gè)物理上真實(shí)存在的數(shù)據(jù)結(jié)構(gòu)。
heap 其實(shí)有很多種實(shí)現(xiàn)方式,比如 binomial heap, Fibonacci heap 等等。但是面試最常考的,也是最經(jīng)典的,就是 binary heap 二叉堆,也就是用一棵完全二叉樹來實(shí)現(xiàn)的。
那完全二叉樹是怎么實(shí)現(xiàn)的?
其實(shí)是用數(shù)組來實(shí)現(xiàn)的!所以 binary heap/PriorityQueue 實(shí)際上是用數(shù)組來實(shí)現(xiàn)的。
這個(gè)數(shù)組的排列方式有點(diǎn)特別,因?yàn)樗倳?huì)維護(hù)你定義的(或者默認(rèn)的)優(yōu)先級(jí)最高的元素在數(shù)組的首位,所以不是隨便一個(gè)數(shù)組都叫「堆」,實(shí)際上,它在你心里,應(yīng)該是一棵「完全二叉樹」。
這棵完全二叉樹,只存在你心里和各大書本上;實(shí)際在在內(nèi)存里,哪有什么樹?就是數(shù)組罷了。
那為什么完全二叉樹可以用數(shù)組來實(shí)現(xiàn)?是不是所有的樹都能用數(shù)組來實(shí)現(xiàn)?
這個(gè)就涉及完全二叉樹的性質(zhì)了,我們下一篇會(huì)細(xì)講,簡(jiǎn)單來說,因?yàn)橥耆鏄涞亩x要求了它在層序遍歷的時(shí)候沒有氣泡,也就是連續(xù)存儲(chǔ)的,所以可以用數(shù)組來存放;第二個(gè)問題當(dāng)然是否。堆的特點(diǎn)

  • 堆是一棵完全二叉樹;
  • 堆序性 (heap order): 任意節(jié)點(diǎn)都優(yōu)于它的所有孩子。
    a. 如果是任意節(jié)點(diǎn)都大于它的所有孩子,這樣的堆叫大頂堆,Max Heap;
    b. 如果是任意節(jié)點(diǎn)都小于它的所有孩子,這樣的堆叫小頂堆,Min Heap;
  • 左圖是小頂堆,可以看出對(duì)于每個(gè)節(jié)點(diǎn)來說,都是小于它的所有孩子的,注意是所有孩子,包括孫子,曾孫...

  • 既然堆是用數(shù)組來實(shí)現(xiàn)的,那么我們可以找到每個(gè)節(jié)點(diǎn)和它的父母/孩子之間的關(guān)系,從而可以直接訪問到它們。
  • 比如對(duì)于節(jié)點(diǎn) 3 來說,

    • 它的 Index = 1,
    • 它的 parent index = 0,
    • 左孩子 left child index = 3,
    • 右孩子 right child index = 4.

    可以歸納出如下規(guī)律:

    • 設(shè)當(dāng)前節(jié)點(diǎn)的 index = x,
    • 那么 parent index = (x-1)/2,
    • 左孩子 left child index = 2*x + 1,
    • 右孩子 right child index = 2*x + 2.

    有些書上可能寫法稍有不同,是因?yàn)樗鼈兊臄?shù)組是從 1 開始的,而我這里數(shù)組的下標(biāo)是從 0 開始的,都是可以的。
    這樣就可以從任意一個(gè)點(diǎn),一步找到它的孫子、曾孫子,真的太方便了,在之后講具體操作時(shí)大家可以更深刻的體會(huì)到。
    那有關(guān)堆的基本操作,以及為什么 heapify() 是 O(n) 的,我們之后再聊。


    作者:是小齊呀
    鏈接:https://juejin.im/post/6880291677651599367

    總結(jié)

    以上是生活随笔為你收集整理的优先队列默认是小顶堆吗_一分钟带你读懂什么是堆?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 天天狠天天操 | 丰满少妇被猛烈进入无码 | www.香蕉视频.com | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 久久精品久 | 婷婷精品一区二区三区 | 老司机一区二区三区 | 美女靠逼视频网站 | 密乳av| 96视频在线观看 | 国产内射合集颜射 | 人人cao| 黄色成人在线视频 | 无码人妻久久一区二区三区 | 精品一区二区日韩 | www日韩在线| 女生扒开尿口让男生桶 | 色婷婷六月 | 亚洲91网 | 麻豆视频在线观看 | 亚洲高清免费观看 | 精产国品一区二区三区 | 黄色片亚洲 | 欧美婷婷六月丁香综合色 | 亚洲成人麻豆 | 黄网在线免费 | 亚洲av无一区二区三区久久 | 欧美成人综合一区 | 亚洲欧洲中文字幕 | 蜜桃无码一区二区三区 | 嫩草私人影院 | 中文字幕影片免费在线观看 | 国产又粗又猛视频 | 色狠狠综合网 | 无码av天堂一区二区三区 | av国产在线观看 | 韩国无码一区二区三区精品 | 丰满少妇一级 | 午夜视频www | 日本高清有码 | 天天插天天爽 | 国产二级片 | 一区=区三区乱码 | 精品不卡一区二区 | 日日夜夜噜噜噜 | 在线成人小视频 | 青青草原成人网 | 邻家有女4完整版电影观看 欧美偷拍另类 | 色婷婷国产精品综合在线观看 | 久久这里只有精品久久 | 免费看久久| 亚洲成熟少妇 | 精品成人18| 成人免费看毛片 | 老师张开让我了一夜av | 日本三级在线 | 性免费网站 | 射射综合网| aaa黄色 | 欧美乱妇18p | 中文字幕在线观看一区二区三区 | 日韩高清一级 | 少妇2做爰交换朴银狐 | 亚洲图片一区二区 | 国产精品成人自拍 | 中文字幕5566 | 日韩午夜片 | 欧美裸体网站 | 国产精品视频一二区 | 国产高清第一页 | 黄色网址在线播放 | 亚洲第九页 | 欧美日韩在线免费看 | 色欲狠狠躁天天躁无码中文字幕 | 国内精品视频在线播放 | 色老大视频 | 黄页免费视频 | 夏晴子在线 | 亚洲视频一区二区在线观看 | 国模吧无码一区二区三区 | 日本不卡视频一区二区三区 | 中文字幕亚洲国产 | 午夜一区 | 奇米网在线观看 | 国产午夜一区 | av自拍一区| 拔擦8x成人一区二区三区 | 欧美9999 | 亚洲中文字幕在线一区 | av手机在线免费观看 | 小柔的淫辱日记(h | 91中文字幕 | 1024精品一区二区三区日韩 | aise爱色av | 性生活三级视频 | 国产精品av一区 | 免费在线视频一区二区 | 欧美爽爽爽 | 在线cao|