數(shù)據(jù)結(jié)構(gòu)與算法分析C語言描述 總結(jié)筆記 第六章

第六章 優(yōu)先隊(duì)列(堆)

1. 基本概念

一種特殊的隊(duì)列,至少支持兩種操作:Insert和DeleteMin;前者插入元素,相當(dāng)于隊(duì)列的enqueue,后者查找、刪除、返回最小的元素,相當(dāng)于隊(duì)列的dequeue。

2. 二叉堆

概念

具有結(jié)構(gòu)性質(zhì)和堆序性質(zhì)的二叉樹(或者說具有堆序性質(zhì)的完全二叉樹)

性質(zhì)

  • 結(jié)構(gòu)性質(zhì):完全二叉樹
  • 堆序性質(zhì):父節(jié)點(diǎn)小于任意子節(jié)點(diǎn)

實(shí)現(xiàn)方法

數(shù)組即可, 鑒于其完全二叉樹的性質(zhì),乘以2可以到達(dá)左子節(jié)點(diǎn),除以2可以到達(dá)父節(jié)點(diǎn)。

操作及其時(shí)間復(fù)雜度:(后面四種操作需要節(jié)點(diǎn)位置信息為基礎(chǔ))

  • Insert: 采用上濾,最壞為O(logN),平均只要比較2.607次,上移1.607層,O(1)
  • DeleteMin: 采用下濾,最壞為O(logN),平均為O(logN)
  • DecreaseKey:
  • IncreaseKey:
  • Delete:
  • BuildHeap: 空堆N個(gè)Insert操作來完成,總運(yùn)行時(shí)間O(N)

3. d堆

  • 類似二叉堆,只是節(jié)點(diǎn)的兒子數(shù)都是d個(gè)(除了最底層的一些節(jié)點(diǎn))。
  • 有證據(jù)顯示,4堆在實(shí)踐中可以勝過二叉堆。

4.左式堆

概念

具有堆序性質(zhì)和和零路徑長(zhǎng)相關(guān)的結(jié)構(gòu)性質(zhì)的二叉樹。

性質(zhì)

  • 堆序性質(zhì):父節(jié)點(diǎn)小于任意子節(jié)點(diǎn);
  • 結(jié)構(gòu)性質(zhì):左兒子節(jié)點(diǎn)的零路徑長(zhǎng)不小于右兒子節(jié)點(diǎn)的零路徑長(zhǎng)。(=>N個(gè)節(jié)點(diǎn)的左式堆右路徑上節(jié)點(diǎn)不超過[log(N+1)])

實(shí)現(xiàn)方法

采用二叉樹的實(shí)現(xiàn)方法,每個(gè)節(jié)點(diǎn)增加零路徑長(zhǎng)域。

操作及其實(shí)踐復(fù)雜度

  • Merge:從由路徑節(jié)點(diǎn)入手,O(logN)
  • Insert:合并一個(gè)節(jié)點(diǎn)左式堆,O(logN)
  • DeleteMin:O(logN)

5. 斜堆

概念

具有堆序的二叉樹,但不具有結(jié)構(gòu)性質(zhì);其基本操作Merge和左氏堆一致,但是右路徑上的節(jié)點(diǎn)左右兒子的交換是無條件的(除了右路徑上最大節(jié)點(diǎn)不交換其左右兒子)

操作

  • Merge:任意單次操作最壞時(shí)間O(N),攤還時(shí)間O(logN)
  • ...

6. 二項(xiàng)隊(duì)列(binomial queue)

概念

具有堆序的二項(xiàng)樹的集合(森林)。

操作

  • Merge: O(logN)
  • Insert:O(logN);從空堆連續(xù)N次插入總最壞時(shí)間O(N)
  • Delete:O(logN)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 課程介紹 先修課:概率統(tǒng)計(jì),程序設(shè)計(jì)實(shí)習(xí),集合論與圖論 后續(xù)課:算法分析與設(shè)計(jì),編譯原理,操作系統(tǒng),數(shù)據(jù)庫(kù)概論,人...
    ShellyWhen閱讀 2,478評(píng)論 0 3
  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學(xué)在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,397評(píng)論 0 12
  • 第一章 緒論 什么是數(shù)據(jù)結(jié)構(gòu)? 數(shù)據(jù)結(jié)構(gòu)的定義:數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 第二章...
    SeanCheney閱讀 6,013評(píng)論 0 19
  • 1. 鏈表 鏈表是最基本的數(shù)據(jù)結(jié)構(gòu),面試官也常常用鏈表來考察面試者的基本能力,而且鏈表相關(guān)的操作相對(duì)而言比較簡(jiǎn)單,...
    Mr希靈閱讀 1,590評(píng)論 0 20
  • 我真不確定,K411和K412原來在初秋竟然冷的如此一致,就算吸一口氣,空氣的稀薄度和記憶都是相似的。以前回家習(xí)慣...
    一周粥粥閱讀 144評(píng)論 0 0

友情鏈接更多精彩內(nèi)容