演算法導論第二章思考題

2021-08-22 05:04:44 字數 2470 閱讀 6384

a.

長度為k的陣列

∴ 時間複雜度為 θ(k²)

∵ 共有n/k個陣列

∴ t(n)= n/k * θ(k²)= θ(nk)

b.

2^i = n/k

∴ i = lg(n/k)

∴ 共有 lg(n/k)+ 1層

∵ 每層合併陣列花費的時間為 θ(n)

∴ 合併所有子陣列的時間為 θ(nlg(n/k))

c.

要與原來歸併排序具有相同的執行時間

∴ nlg(n/k)+ nk = c*nlgn

當k逐漸增大,lg(n/k)逐漸減小

∴ k最大為lgn,此時lg(n/lgn)被忽略

d.

選擇插入排序比合併排序快的最大的列表長度

a.

a』中的元素全部來自於a中變換後的元素。

b.

迴圈不變式:每次迭代之前,a[j]=min,並且子陣列a[j..n]中的元素還是最初在a[j..n]中的元素。

初始化:第一次迭代之前j=n,子陣列a[j..n]只包含乙個元素a[n],迴圈不變式顯然成立。

保持:迭代乙個給定值的j。首先假設此次迭代前迴圈不變式成立,那麼根據迴圈不變式,a[j]是a[j..n]中最小的元素。第3~4行**表示如果a[j]終止:迴圈終止時j=i。根據迴圈不變式,a[j]=a[i]=min,並且a[i..n]中的元素最初都在a[i..n]中。

所以在2~4行的for迴圈執行結束過後,a[i]將是a[i..n]中最小的元素。

c.

迴圈不變式:每次迭代之前,子陣列a[1..i-1]包含了a[1..n]中前i-1小的所有元素,並且它們是已排好序的。a[i..n]中包含了a[1..n]中餘暇的元素。

初始化:第一次迭代之前i=1。子陣列a[1..i-1]為空,迴圈不變式顯然成立。

保持:迭代乙個給定值的i。首先假設此次迭代前迴圈不變式成立,那麼根據迴圈不變式,a[1..i-1]包含了a[1..n]中前i-1小的所有元素,並且它們是已排好序的。第一部分已經證明:在執行2~4行的for迴圈後a[i]是a[i..n]中最小的元素。所以在執行了2~4行的for迴圈後a[1..i]中就包含了a[1..n]中前i小的所有元素,並且它們已經排好序。子陣列a[i+1..n]就包含了n-i個a[1..n]中餘下的元素。

終止:迴圈終止時i=n+1 => i-1=n。所以根據迴圈不變式,a[1..i-1]óa[1..n]中包含了a[1..n]中前i-1小的元素(即a[1..n]的全部元素),並且它們是排好序的。

所以在1~4行的for迴圈執行結束過後,a[1..n]將是有序的。

根據第二部分的結論,外層for迴圈結束後,陣列a[1..n]中的元素將是排好序的。故氣泡排序演算法是正確的。

d.

最壞情況的執行時間是θ(n²),效能比插入排序差,在以排好序的陣列中插入排序的執行時間是θ(n),而氣泡排序仍是θ(n²)。

a.

θ(n)

b.

樸素的多項式**實現

public static int test(int arr,int x) 

sum += v*arr[i];

} return sum;

}

執行時間是θ(n²)

與霍納規則相比,效能差很多

c.

初始化:i = n,y = 0,當i代入迴圈不變式後y = 0,迴圈不變式成立

保持:終止:i = -1,此時y = σ(0,n)akx^k,與迴圈不變式當i = -1時的多項式y相等,即為所求之和

d.

歸納法,類似上面保持裡的方法,假設 i = 1成立,在乘以x得出結果與i=0比較即可

a.

(1,5)(2,5)(3,4)(3,5)(4,5)

b.

降序排列的陣列,有n(n-1)/2對逆序對

c.

逆序對的數量越多,插入排序的時間越長

證明:在增序排列的陣列中,逆序對最少為0,此時插入排序的執行時間為θ(n)

而當降序排列的陣列中,逆序對最多為n(n-1)/2,此時插入排序的執行時間為θ(n²)

不難看出逆序對越多所造成的內層迴圈也就越多,執行時間也越長

d.

歸併排序過程中每次將兩個子串行歸併成乙個子串行的過程中,如果左邊的元素大於右邊的元素,計數就自增,歸併完成後就是逆序對數目。

演算法導論第21章思考題

給定乙個操作序列,包括insert x 和extract min,運算元x 1,n 4,8,e,3,e,9,2,e,e 將第i次extract min的數儲存在extract i 中 建立乙個優先佇列,給定乙個操作,馬上在優先佇列中做出相應改變即可 演算法解釋 將樣例輸入看成s1,e,s2,e,s3...

演算法導論 思考題 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集合的一半...