2.2-1
用θ記號表示函式n^3/1000 - 100n^2 - 100n +3
解答:這個就很簡單了,這裡我們真正感興趣的執行時間是增長率,也就是直接控制函式影象斜率的因素。
這裡就是θ(n^3)
2.2-2
考慮排序儲存在陣列a中的n個數:首先找出a中的最小元素並將a[1]中的元素進行交換。
接著,找出a中的次最小元素並將其與a[2]中的元素進行交換。
對a中前n-1個元素按該方式繼續。該演算法稱為選擇演算法。
①寫出其偽**
②該演算法維持的迴圈不變式是什麼?
③為什麼它只要對前n-1個元素,而不是對所有n個元素執行?
④用θ記號給出選擇排序的最好情況與最壞情況執行時間。
解答:偽**參考:
for i from to n - 1:
minindex = i
for j from i + 1 to n:
if a[i] < a[minindex] :
minindex = i
swap a[i] and a[minindex]
③因為是在比較大小後進行交換的,所以最後乙個元素沒有必要和自己進行比較
④我這個寫法,個人感覺最好和最壞的情況都是θ(n^2)。這裡第二個迴圈執行的次數是不變的,為n(n+1)/2 - 1 次,這裡與原始list是如何放置元素好像沒有關係。
希望有演算法比較好的同學給我指正下錯誤,或者指正一下偽**。
2.2-3
再次考慮線性查詢問題。假定要查詢的元素等可能地為陣列中的任意元素,平均需要檢查輸入序列的多少元素?最壞情況又如何?用θ記號給出線性查詢的平均情況和最壞執行時間。證明你的答案。
解答:平均需要檢查n/2個元素
最壞的情況,需要檢查n個元素
兩種情況都是θ(n)
2.2-4
我們可以如何修改幾乎任意演算法來使之具有良好的最好情況執行時間?
解答:將資料一開始就排列成我們想要順序(公升序或降序)就可以了。
第二章 2 3節
2.3 1 使用圖2 4作為模型,說明歸併排序再陣列a 3,41,52,26,38,57,9,49 解答 兩個數中間的 號為連線符,代表 號兩邊的數歸併一起。3 41 52 26 38 57 9 49 3 41 26 52 38 57 9 49 3 26 41 52 9 38 49 57 3 9 2...
第二章 第二節 注釋
零 怎麼編寫注釋 編寫注釋的方式有三種 1.以 開頭 2.以三個 開頭和結尾 3.以三個 開頭和結尾 定義乙個字串變數 name 張三 定義乙個函式 defgetname return name defsetname n param n 姓名 return name n defsetage age ...
第二章 2 2 1節練習
練習2.9 解釋下列定義的含義。對於非法的定義,請說明錯再何處並將其改正。a std cin int input value b int i c double salary wage 9999.99 d int i 3.14 解答 a 非法,這裡不能對變數進行宣告。必須在輸入語句之前對變數定義或者宣...