漫畫演算法 小灰的演算法之旅

2021-09-29 20:48:26 字數 1259 閱讀 1460

**

1.樹是n個節點的有限集,有且僅有乙個特定的稱為根節點。當n=0時,成為空樹。當n>1時,其餘節點可分為m(m>0)個互不相交的有限集,每乙個集合本身又是乙個樹,並稱為根的子樹。

2.二叉樹是樹的一種特殊形式,每乙個節點最多有兩個孩子節點。注意,這裡是最多有2個,也可能只有1個,或者沒有孩子節點。二叉樹包含完全二叉樹和滿二叉樹兩種特殊形式。

3.根據遍歷節點之間的關係,可以分為前序遍歷、中序遍歷、後序遍歷、層序遍歷這4種方式;從更巨集觀的角度劃分,可以劃分為深度優先遍歷和廣度優先遍歷兩大類。

4.二叉堆是一種特殊的滿二叉樹,本質上是一種完全二叉樹,分為最大堆和最小堆。

在最大堆中,任何乙個父節點的值,都大於或等於它左、右孩子節點的值。

在最小堆中,任何乙個父節點的值,都小於或等於它左、右孩子節點的值。

5.優先佇列分為最大優先佇列和最小優先佇列

在最大優先佇列中,無論入隊順序如何,當前最大的元素都會優先出隊,這是基於最大堆實現的。

在最小優先佇列中,無論入隊順序如何,當前最小的元素都會優先出隊,這是基於最小堆實現的。

3.1.1樹

樹和圖是典型的非線性資料結構

樹的最大層級數,被成為樹的高度或深度。

3.1.2二叉樹

1、插入節點:插入位置是完全二叉樹的最後乙個位置。按照最小堆的性質,讓新節點「上浮」,和父節點交換位置,繼續比較,直至到堆頂位置。

2、刪除節點:所刪除的是處於堆頂的節點。把堆的最後乙個節點臨時補到原本堆頂的位置。

然後和它的左、右孩子進行比較。如果左、右孩子節點中的最小的乙個比它小,則「下沉」,依次類推,繼續比較。

3、構建二叉堆:也就是把乙個無序的完全二叉樹調整為二叉堆,本質就是讓所有非葉子節點依次「下沉」。

總結:堆的插入操作是單一節點的「上浮」,刪除操作是單一節點的「下沉」。這兩個操作的平均交換此時都是堆高度的一半,所以時間複雜度是o(logn)。堆的構建,需要所有非葉子節點依次「下沉」,所以時間複雜度是o(nlogn)?但實際上它是o(n)。涉及數學推導過程。

3.3.3**實現:二叉堆的儲存方式是順序儲存,即陣列。

**中有乙個優化的點,就是在父節點和孩子節點做連續交換時,並不一定要真的交換,只需要先把交換一方的值存入temp變數,做單向覆蓋,迴圈結束後,再把temp的值存入交換後的最終位置即可。

小結:二叉堆是實現堆排序及優先佇列的基礎。

3.4優先佇列

3.4.1優先佇列的實現

程式設計師小灰 演算法集錦 漫畫演算法

漫畫 什麼是concurrenthashmap?漫畫 高併發下的hashmap 漫畫 什麼是hashmap?漫畫 什麼是紅黑樹?什麼是aes演算法?整合版 漫畫 什麼是sha系列演算法?漫畫 什麼是md5演算法?漫畫 如何破解md5演算法?漫畫 什麼是base64演算法?什麼是a 尋路演算法?漫畫 ...

程式設計師小灰的漫畫演算法和知識總結,高品質強推!!!

漫畫知識彙總 漫畫 深度優先遍歷 和 廣度優先遍歷 漫畫 什麼是 圖 修訂版 漫畫 什麼是 https 協議?漫畫 什麼是concurrenthashmap?漫畫 高併發下的hashmap 漫畫 什麼是hashmap?漫畫 什麼是紅黑樹?漫畫 什麼是加密演算法?什麼是aes演算法?整合版 漫畫 什麼...

漫畫演算法筆記 堆排序

include include include include include using namespace std 下沉調整 template typename t void downadjust vector vec,int parentindex,int size 如果父節點小於任何乙個孩子...