演算法導論 習題 6 5 8

2021-05-26 01:28:31 字數 541 閱讀 8026

題:

請給出乙個時間為o(nlgk)、用來將k個已排序鍊錶合併為乙個排序鍊錶的演算法。此處n為所有輸入鍊錶中元素的總數。

k個已排序鍊錶,假設每乙個鍊錶的第乙個元素為root(i)  (i = 1,2,3...k)。

那麼可以為這k個元素root(i)構造乙個最小堆heap_min,其時間複雜度為o(lgk)。

此時堆頂元素假設為root(x),根據最小堆性質,root(x)是所有root(i)中的最小值。

而每個鍊錶已經排序,所以其也是整個n個元素中的最小值,將其取出,放入另乙個鍊錶res中。

對於root(x)所在的鍊錶,由於第乙個元素已經被取出,所以用此鍊錶中的第二個元素代替root(x),由於root(x)的值已經改變,整個最小堆heap_min需要調整,時間複雜度為o(lgk)。假如某個鍊錶的值都被取空,那麼就用heap_min的最後乙個元素root(y)作為整個堆的新樹根。依次,知道取出所以元素。

根據以上分析可知:每取出乙個元素都要進行一次heap_min的堆調整,而調整的時間複雜度為o(lgk),一共要進行n次,總時間複雜度為o(nlgk)。

演算法導論6 5 8習題解答 最小堆K路合併

演算法思想 1.從k個鍊錶中取出每個鍊錶的第乙個元素,組成乙個大小為k的陣列arr,然後將陣列arr轉換為最小堆,那麼arr 0 就為最小元素了 2.取出arr 0 將其放到新的鍊錶中,然後將arr 0 元素在原煉表中的下乙個元素補到arr 0 處,即arr 0 next,如果arr 0 next為...

演算法導論 習題 5 4 1

題 乙個房間裡必須要有多少人,才能讓某人和你生日相同的概率至少為1 2?必須要有多少人,才能讓至少兩個人生日為7月4日的概率大於1 2?解 1.假設一年有n 365 天,房間裡面有x人 不算自己 為求某人與自己生日相同,可求其反面,即房間裡面沒人跟自己生日相同,他們每個人生日可以在n天中選擇除去我生...

演算法導論 習題5 2 2

首先我們有三個觀察結論 1 1號助理總是會被雇用 2 最佳助理 即rank為n的助理 總是會被雇用 3 最佳助理不可能是1號助理,因為那樣將只能剛好雇用一次。在使hire assistant剛好雇用兩次的序列中,一號助理必然有rank i n 1,所有rank在 i 1.n 1 區間內的助理必然在r...