堆的使用
今天學習了乙個演算法,堆
用法之一:
堆一般用陣列的形式儲存數字,通過維護乙個完全二叉樹的結構來儲存前幾大的數字;
先確定乙個需要維護的數字的多少,然後建立乙個陣列,陣列的第一樹根是arr;
然後每個arr[i]樹根的左兒子是arr[2i]右兒子 是arr[2i+1];十分具有規律,所以一般就用陣列就可以解決,用鍊錶有些麻煩,但是比較公整;
1.先存進前m,個數進入陣列,
2.然後迴圈由m/2開始迴圈到1,檢視每個結點的兒子和根是否符合關係,然後調整,
3,通過不斷更新和調整遍歷完所有輸入的資料,最後輸出即可。
初步認識堆
如果有乙個關鍵碼的集合k 把它的所有元素按完全二叉樹的順序儲存方式儲存在乙個一維陣列中,並滿足 ki k2i 1 且 ki k2i 2 ki k2i 1 且 ki k2i 2 i 0,1,2 則稱為小堆 或大堆 將根節點大的叫大堆,根節點小的叫小堆。堆的特點 每個節點比他的孩子節點小 堆是乙個完全二...
堆的簡單應用
一 大資料的處理 給出n個資料,要求找到並輸出這n個數裡面最大的k個數 思路 利用堆,先建乙個開闢乙個大小為k的陣列,從n個資料裡拿出k個資料放到堆裡面,然後再通過向 下調整法把堆調整為最小堆,此時陣列的第乙個元素就是堆裡面最小的元素,然後在剩下的n k個 資料中依次和堆裡面最小的資料進行比較,若比...
堆的簡單實現
堆資料結構是一種陣列物件,可被視為一顆完全二叉樹 堆結構的二叉樹儲存 最大堆 父 子 最小堆 父 子 如下圖,先建立乙個大堆 下面用 模擬實現乙個大堆 插入 頭刪 include include include using namespace std template class heap heap...