演算法導論8 2 4習題解答 計數排序

2021-09-06 02:43:59 字數 671 閱讀 4480

clrs 8.2-4 :在o(1)的時間內,回答出輸入的整數中有多少個落在區間[a...b]內。給出的演算法的預處理時間為o(n+k)

演算法思想:

利用計數排序,由於在計數排序中有乙個儲存數值個數的臨時儲存區c[0...k],利用這個陣列即可。

#include

<

iostream

>

using 

namespace

std;

//通過改編計數排序而來,因為有些部分需要注釋掉

void

counting_sort(

int*

&a,

intlength,

intk,

int*

&b,

int*

&c);

intmain()

}return 0;

}void

counting_sort(

int*

&a,

intlength,

intk,

int*

&b,

int*&c)

*/}

ps:計數排序的總時間為o(k+n),在實踐中,如果當k = o(n)時,我們常常採用計數排序,這時其執行時間為o(n)

演算法導論習題解答 2 3 7

2.3 7 請給出乙個執行為 nlgn 的演算法 偽碼 使之能在給定乙個由n 個整數構成的集合s 和另乙個整數x 時,判斷出s 中是否存在有兩個其和等於x 的元素。解 解題思路 先對集合s進行歸併排序,然後新建乙個陣列s1,使得s1 i x s i 再將兩個陣列並起來。如果在並的過程中發現有兩個元素...

演算法導論6 5 7習題解答

clrs 6.5 7 heap delete a,i 操作將結點i中的項從堆a中刪去。對含n個元素的最大堆,請給出時間為o lgn 的heap delete的實現。演算法思想 對即將被刪的i處的元素設定為堆中末尾的元素,同時堆的大小減1.此題同時附帶6.2 5的解答 如下 1 include 2 u...

演算法導論12 2節習題解答

clrs 12.2 1 c錯,240及240之後的節點應該都為911左子樹上的節點,那麼所有節點必然小於或等於911,但點912明顯違反了。clrs 12.2 2 search minimum x if left x nil search minimum left x return x search...