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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

二叉堆(优先队列)

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

【0】README

0.1) 本文總結于 數據結構與算法分析,但源代碼均為原創;旨在理清二叉堆(優先隊列) + 堆的其他操作及其應用, 以便讓朋友些知道為什么要學習優先隊列;


【1】二叉堆

1.0)優先隊列定義:優先隊列是允許至少下列兩種操作的數據結構,insert(插入), 它的工作時顯而易見的,以及 deleteMin(刪除最小者), 它的工作是找出、返回和刪除優先隊列中最小的元素;
1.1)我們把二叉堆中只叫做堆, 堆也有兩個性質:結構性和堆序性;對堆的 insert and deleteMin 操作必須要到堆的所有性質都被滿足時才能終止;
1.2)結構性質

  • 堆是一棵被完全填滿的二叉樹,其底層上的元素從左到右填入,這樣的樹稱為 完全二叉樹;完全二叉樹 的高是 logN(向下取整), 顯然它是 O(logN);
  • 堆數據結構將由一個數組(不管關鍵字是什么類型)、一個代表最大值的整數及當前的堆大小組成;

1.3) 堆序性質

  • 1)堆序性:使操作被快速執行的性質是 堆序性;由于我們想要快速找出最小元,因此最小元應該在根上;依據樹的遞歸定義,則任意節點就應該小于它的后裔;

【2】基本的堆操作

2.1)insert 插入:為將一個元素X 插入到堆中, 在下一個空閑位置創建一個空穴, 否則該堆將不是完全樹;如果X 可以放在該空穴中而并不破壞堆的序, 那么插入完成, 否則, 我們把空穴的父節點上的元素移入該空穴中;(這種一般策略叫做 上濾, 新元素在堆中上濾直到找出正確的位置);

2.2)deleteMin(刪除最小元):找出最小元容易,困難是刪除它;當刪除一個最小元時, 在根節點處產生了一個空穴, 由于現在堆少了一個元素,因此對中最后一個元素 X 必須移動到堆的某個地方;如果X 可以被放到空穴中,那么 deleteMin 完成;顯然這一般不可能, 因此我們將空穴中的較小者移入空穴, 這樣就把空穴向下推了一層;重復該步驟直到 X 可以被放入空穴中;因此,我們的做法是將 X 置入沿著從根開始包含最小兒子的 一條路徑上的一個正確的位置;(這種策略叫做下濾);


2.3)出現的問題+解決方法

  • 出現的問題:在堆實現中, 經常發生的錯誤是當堆中存在偶數個元素的時候, 此時將遇到一個節點只有一個兒子的情況, 我們必須保證假設節點不總有兩個兒子;
  • 解決方法:始終保證你的算法把每一個節點都看成有兩個兒子;

【3】源代碼+printing

3.1)download source code :
https://github.com/pacosonTang/dataStructure-algorithmAnalysis/tree/master/chapter6
3.2)代碼詳情+打印效果參見
http://blog.csdn.net/PacosonSWJTU/article/details/49498255
“【2】source code+printing”部分,因為二叉堆(優先隊列)的基本操作 和 其他高級的應用操作的實現代碼我都放到一起的;

總結

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

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