堆的**實現
複雜度分析
二叉堆本質上是一種完全二叉樹
,它分為兩個型別:
最大堆
:最大堆任何乙個父節點的值,都大於等於它左右孩子節點的值。
最小堆
:最小堆任何乙個父節點的值,都小於等於它左右孩子節點的值。
二叉堆的根節點叫做堆頂
。
最大堆和最小堆的特點,決定了在最大堆的堆頂是整個堆中的最大元素; 最小堆的堆頂是整個堆中的最小元素。
構建二叉堆,也就是把乙個無序的完全二叉樹調整為二叉堆,本質上就是讓所有非葉子節點依次下沉
。
二叉堆雖然是一顆完全二叉樹, 但它的儲存方式並不是鏈式儲存,而是順序儲存
。
換句話說, 二叉堆的所有節點都儲存在陣列
當中。
我們再來回顧一下堆排序演算法的步驟:
把無序陣列構建成二叉堆。
迴圈刪除堆頂元素,移到集合尾部,調節堆產生新的堆頂。
第一步
,把無序陣列構建成二叉堆,假設滿二叉樹高為h,有n=2h-1個節點。那麼 建堆過程中,第h層的2(h-1)個節點最多交換0次即可調整為堆,第(h-1)層的 2^(h-2)個節點最多交換1次,…,第1層的1個節點最多交換(h-1)次。因此時 間複雜度為o(n) 。
第二步
,需要進行n-1次迴圈。每次迴圈呼叫一次 downadjust 方法,所以第二步的 計算規模是 (n-1) * logn ,時間複雜度 o(nlogn)。
兩個步驟是並列關係,所以整體的時間複雜度同樣是 o(nlogn)。
百面機器學習 深度學習常見問題
一 前向神經網路 1 寫出常用啟用函式 2 神經網路是否可將引數全部初始化為0?3 多層感知機表示異或邏輯需要多少個隱層?4 什麼是梯度消失和梯度 如何避免?5 寫出多層感知機的平方誤差和交叉熵的損失函式 6 解釋卷積操作中的稀疏互動和引數共享及其作用 7 乙個隱層需要多少隱節點才能夠實現包含n元輸...
百面機器學習
目錄 第一章 特徵工程 1.1特徵歸一化 1.2高維組合特徵的處理 特徵工程 對原始資料進行一系列工程處理,將其提煉為特徵。作為輸入給演算法和模型使用。本質上,特徵工程是乙個表示和展現資料的過程。特徵工程旨在去除原始資料中的雜誌。結構化資料 類似於資料庫中的乙個表,每乙個行列都有清晰的定義,包含數值...
百面機器學習一
特徵歸一化常見的有兩種,一種是線性函式歸一化,一種是零均值歸一化。線性函式歸一化 min max scaling 對原始資料進行線性變換,將結果對映到 0,1 的範圍,歸一化公式如下 x no rm x xmi nxma x xm in x frac x xnorm xma x x min x xm...