《演算法筆記》學習記錄 Part 3 樹(下)

2021-08-15 23:52:30 字數 832 閱讀 9843

9.7.1 堆的定義與基本操作

堆是一顆完全二叉樹,樹中的每個結點都不小於(或不大於)其左右結點孩子結點的值,分為大根堆和小根堆

由於是完全二叉樹,可以使用陣列儲存

const int maxn = 100;

//heap為堆,n為元素個數

int heap[maxn],n=10;

//對heap陣列在[low,high]範圍進行向下調整

void downadjust(int low,int high)

//如果孩子中最大的權值比欲調整結點i大

if(heap[j]>heap[i])else

}}

建堆,假設序列中元素的個數為n,由於是完全二叉樹,則[1,n/2]區間內的結點都是非葉子結點

//建堆

void createheap()

}

如果要刪除堆中的最大元素,即刪除堆頂元素,令最後乙個元素覆蓋堆頂元素,然後對根結點進行調整即可

//刪除堆頂元素

void deletetop()

如果想要往堆裡新增乙個元素,可以把想要新增的元素放在陣列最後,然後進行向上調整。向上調整總是把欲調整結點與父親結點比較,如果權值比父親結點大,那麼就交換與其父親結點,這樣反覆比較,直到達堆頂或是父親結點的權值較大為止,**如下,時間複雜度為o(logn)

//對heap陣列在[low,high]範圍內進行向上調整

void upadjust(int low,int high)

}

Python學習筆記 part 3

ide vscode python版本 python3.6 學習教材 python程式設計從入門到實踐 人民郵電出版社 操作列表 for a in b 構建了python的for迴圈,迴圈方式為每次從列表b中取出乙個元素存入a。例如 idiols chen ju liu for idiol in i...

Gentoo安裝筆記(part3

此安裝筆記是按照gentoo中文手冊上實際操作記下來的,使用的是宿主機ubuntu9.04 virtualbox3.04,在virtualbox3.04中按預設屬性建立了乙個gentoo虛擬機器。使用gentoo minimal映像檔案安裝。6.開始安裝gentoo 1 選擇乙個合適的映象站點 mi...

JS筆記 part3(物件導向)

物件導向的本質是對面向過程的封裝 物件導向三大特徵 封裝 繼承 多型將某個具體功能封裝在物件中,對外部暴露指定的介面,外界使用時無需考慮內部是如何實現的 function person name,age,country var person1 newperson lin 30 china conso...