日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《算法导论》2.2练习答案

發布時間:2024/8/1 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《算法导论》2.2练习答案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2.2-1用Θ記號表示函數n3/1000-100n2-100n+3


舍棄它的低階項,并忽略前面的常數因子
Θ(n3)

2.2-2考慮排序存儲在數組A中的n個數:首先找出A中的最小元素并將其與A[1]中的元素進行交換。接著,找出A中的次最小元素并將其與A[2]中的元素進行交換。對A中前n - 1個元素按該方式繼續。該算法稱為選擇算法,寫出其偽代碼。該算法維持的循環不變式是什么?為什么它只需要對前n-1個元素運行?用Θ記號給出選擇排序的最好情況和最壞情況運行時間。


(1)偽代碼:
SELECTION-SORT(A)

for i=1 to A.length-1min_loc=ifor j=i+1 to A.lengthif A[j]<A[min_loc]min_loc=jif min_loc!=iswap(A[i],A[min_loc])

附贈C語言實現:

//用C語言實現選擇排序 #include <stdio.h> #define SWAP(X,Y) X=X+Y;Y=X-Y;X=X-Yvoid selectSort(int* a, int n) {int min_loc;int i, j;for (i = 0; i < n-1; i++) {min_loc = i;for (j = i + 1; j < n; j++) {if (a[j] < a[min_loc]) {min_loc = j;//子序列最小值所在位置} }if (min_loc != i) {SWAP(a[min_loc], a[i]);}} }main(){//測試int a[] = { 5,2,4,7,1,3,2,6 };selectSort(a, 8);for (int i = 0; i < 8; i++)printf("%d ", a[i]);//輸出:1 2 2 3 4 5 6 7 }

(2)循環不變式:在(變量為i的)for循環每次迭代開始時,子序列A[1…i]包含已排序好的最小的i個元素。
(3)因為在n-1次(變量為i的)循環后,子序列A[1…n-1]包含A中已排好序的前n-1個最小元素,因此這時A[n]一定已經是最大的了。
(4)Θ(n2)

2.2-3再次考慮2.1-3中的線性查找問題。假定要查找的元素等可能地為數組中的任意元素,平均需要檢查輸入序列的多少元素?最壞情況又如何呢?用Θ記號給出線性查找的平均情況和最壞情況運行時間。

2.1-3的線性查找見上一篇:《算法導論》2.1練習解答


平均要檢查n/2個,Θ(n)
最壞情況要檢查n個,Θ(n)

2.2-4應如何修改任何一個算法,才能使之具有良好的最好情況運行時間。


可以針對特定條件的問題做針對性的樣例,如果遇到這種(可能是出現概率較高的)特定條件直接輸出準備好的結果,這是針對特定問題的優化。

下一節:算法導論2.3練習答案

總結

以上是生活随笔為你收集整理的《算法导论》2.2练习答案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。