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

2021-08-31 14:48:08 字數 722 閱讀 9657

•2.3-7

請給出乙個執行為θ(nlgn)

的演算法(偽碼),使之能在給定乙個由n

個整數構成的集合s

和另乙個整數x

時,判斷出s

中是否存在有兩個其和等於x

的元素。

解:解題思路:先對集合s進行歸併排序,然後新建乙個陣列s1,使得s1[i] = x

–s[i],再將兩個陣列並起來。如果在並的過程中發現有兩個元素相等且兩個元素乙個來自s,乙個來自s1,則可以確定s中存在有兩個其和等於x的元素。

find whether x exits

1、sort(s)

2、for i <- 0 to length(s) –1

3、do s1[i] <- x - s[i]

4、for i <- 0 to length(s) –1

5、do merge( s,s1 ) 

6、if s[p] > s1[q]

7、s0[k] <- s[p]  p++ k++

8、if s[p] < s1[q]

9、s0[k] <- s[q]  q++ k++

10、if s[p] == s1[q]

11、return true

12、return false        

在第一行進行排序時,時間代價為θ(nlgn)

,後來的合併過程時間代價為θ(n)

,總的時間代價為θ(nlgn)。

演算法導論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...

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

clrs 8.2 4 在o 1 的時間內,回答出輸入的整數中有多少個落在區間 a.b 內。給出的演算法的預處理時間為o n k 演算法思想 利用計數排序,由於在計數排序中有乙個儲存數值個數的臨時儲存區c 0.k 利用這個陣列即可。include iostream using namespace st...