演算法導論 思考題6 1 用插入的方法建堆

2021-09-02 18:57:34 字數 1350 閱讀 8278

用插入的方法建堆)我們們可以通過反覆呼叫max-heap-insert實現向乙個堆中插入元素,考慮build-max-heap的如下實現方式:

a.當輸入資料相同的時候,build-max-heap和build-max-heap』生成的堆是否總是一樣?如果是,請證明;否則,請舉出乙個反例。

b.證明:在最壞情況下,呼叫build-max-heap』建立乙個包含n

nn個元素的堆的時間複雜度是θ(n

lgn)

θ(nn)

θ(nlgn

)。

a.

兩種方法生成的堆有可能不一樣。例如,取a

aa = 。採用build-max-heap生成的堆為

而採用build-max-heap』(插入方法)生成的堆為

最壞情況為a

aa中的元素按公升序排列。此時,每插入乙個元素i

ii,都要將該元素移動到根結點,移動的步數為當前元素在堆中的深度d

id_i

di​。建堆的總時間取決於插入每個元素所移動的步數之和,即堆中所有元素的深度之和。

簡化分析,假設最終建立的堆為一棵滿二叉樹,它的高度為h=⌊

lgn⌋

h=⌊n⌋

h=⌊lgn

⌋,並且堆中的元素個數為n=2

h+1−

1n=2^-1

n=2h+1

−1。我們對每一層進行分析,可以得到下表。

將每一層所有結點的深度和相加,即可得到整個堆中所有元素的深度之和t(n

因此,在最壞情況下,用插入方法建立乙個包含n

nn個元素的堆的時間複雜度是θ(n

lgn)

θ(nn)

θ(nlgn

)。

演算法導論 思考題 4 3

a.利用主方法可得,t n n的log3 4次方 b.n f n lgn,不能應用主方法 共log3 n 1層,每層代價n lg n 3 的i次方 最後一層共n個 1 的結點,代價為 n t n n lg n 3 的i次方 n n lgn n n log3 2 n o n 又因為t n 最後一層代價...

演算法導論 思考題 8 4

寫一下我的思路,大概是對的,詳細證明不出來。設藍色水壺為a,紅色為b 先取乙個a1,對所有的b做一次比較,可以將b分為兩個部分,一部分大於a1,一部分小於a1 再取乙個a2,將b分為三個部分 再取a3,將b分為四個部分 假設現在b被分成了k個部分,b1,b2,b3.bk,每次取ai,都從b集合的一半...

演算法導論 思考題 4 5

這題實在沒什麼思路,網上找了一下答案。如果一開始就能夠確定好的晶元多於壞的,則可以保證每輪檢測結束好的晶元都多於壞的,一直到最後如果剩2塊晶元,則兩塊肯定都是好的 剩3塊晶元就再檢測一次,如果結果都是好的,就隨意取一片必定是好的 如果結果都是壞的,則剩下的那塊肯定是好的。來證明一下上面的結論 設有x...