一,二叉堆
二叉堆本質上是一種完全二叉樹,分為兩個型別
1.最大堆。
2.最小堆。
最大堆:最大堆的任何乙個父節點的值,都大於或等於它左,右孩子節點的值。
最小堆:最小堆的任何乙個父節點的值,都小於或等於它左,右孩子節點的值。
二叉堆的根節點叫做堆頂。最大堆的堆頂是整個堆中的最大元素,最小堆的堆頂是整個堆中的最小元素。
二,二叉堆的操作
1,插入節點
2,刪除節點
3,構建二叉堆
此處以最小堆舉例:
1.插入節點:當二叉堆插入節點時,插入位置時完全二叉樹的最後乙個位置。(最後乙個位置!!)
此時。若新節點的父節點比新插入的節點大,根據二叉堆的性質,新插入的節點應該與父節點交換位置,使得 左右孩子節點比父節點小。然後繼續與新節點的父節點做比較,若比父節點大的話,繼續讓新節點上浮,替換父節點的位置。
2.刪除節點:刪除節點的操作正好與插入節點的操作相反,比如刪除的是堆頂的父節點,此時,就會將最後乙個節點臨時補到刪除的節點的位置,然後讓暫處於堆頂位置的節點與它的左右孩子進行比較,如果左右孩子中有比該節點小的值,則讓該節點下沉,讓左右孩子中小的那個節點上浮,以此類推,繼續向下比較。
3,構建二叉堆
構建二叉堆就是把乙個無序的完全二叉樹調整為二叉堆,本質就是讓所有非葉子節點依次「下沉"。
也就是說讓完全二叉樹的從左邊最後乙個節點處開始,讓節點值依次與它的左右孩子節點進行比較,若小於其中最小的乙個節點值,則該節點下沉,然後再進行同一層的其他節點,同樣讓節點值與它的左右孩子進行比較,若小於左右孩子中最小的那乙個,則與最小的那個節點進行位置互換,也就是下沉。依次類推,經過幾輪下沉操作後,就變成(構成)了乙個最小堆。
演算法學習(四)
說明 計算機中的所有值都以二進位制系統表示。在這個簡單的任務中,您要編寫乙個程式,該程式計算給定值中的非零位數。我們使用的是32位整數值,所以應該從0到32個非零位。value binary count 1 00000000000000000000000000000001 1100 00000000...
演算法 學習筆記
1.輸入輸出演算法至少有乙個或多個輸出 2.有窮性 3.確定性 4.可行性 1.正確性a.演算法程式沒有語法錯誤 b.演算法程式對於合法的輸入資料能夠產生滿足要求的輸出結果 c.演算法程式對於非法的輸入資料能夠得出滿足規格說明的結果 d.演算法對於精心選擇的,甚至刁難的測試資料都有滿足要求的輸出結果...
演算法學習筆記
複雜度分析 1.只關注迴圈次數最多的一行 2.總複雜度等於量級最大 的複雜度 3.巢狀 的複雜度等於巢狀 內外複雜度的乘積 單鏈表結構和順序儲存結構的優缺點 儲存分配方式 時間效能 空間效能 單鏈表結構 用一組任意的儲存單元存放線性表元素 查詢 o n 插入和刪除 找到某位置的指標後,插入和刪除的時...