2.2-1
只看最高次項,並忽略係數,時間複雜度為:θ(n^3).
2.2-2
def
swap
(a,b)
:return b,a
defselect_sort
(a):
n=len(a)
for i in
range
(n-1):
minindex=i
for j in
range
(i+1
,n):
if a[j]
: minindex=j
a[i]
,a[minindex]
=swap(a[i]
,a[minindex]
)if __name__ ==
'__main__'
: a=[2
,5,1
,3,4
,7,0
,9,2
] select_sort(a)
print
(a)
迴圈不變式:
執行第i次時,前i-1個元素已經排好序,只要找到第i小個元素交換即可。
迴圈結束後a陣列中前n-1小的數字按大小順序排好,所以只需要對前n-1個元素操作
時間複雜度:θ(n^2)
2.2-3
若待檢查的元素等可能的出現在陣列任意位置,平均需要檢查輸入序列的n/2個元素,最壞的情況下要檢查n個元素,它們的複雜度都是θ(n)。
2.2-4
要想修改任何演算法,使其具有最好的運算時間,我覺得只能通過新增特殊情況使其具有最好的複雜度,如果輸入與此特殊情況相匹配,就返回這個預先計算出的答案。
《演算法導論》2 2練習答案
捨棄它的低階項,並忽略前面的常數因子 n3 2.2 2考慮排序儲存在陣列a中的n個數 首先找出a中的最小元素並將其與a 1 中的元素進行交換。接著,找出a中的次最小元素並將其與a 2 中的元素進行交換。對a中前n 1個元素按該方式繼續。該演算法稱為選擇演算法,寫出其偽 該演算法維持的迴圈不變式是什麼...
演算法導論 2 2節程式設計練習C 實現
2.2節重點描述評估演算法效能的工具 時間複雜度。練習 2.2 3 選擇排序演算法的實現。由於選擇排序在最好情況的輸入下也要將陣列中的值全部都比較一遍,所以其在最好情況和最壞情況下的時間複雜度均為n 2。include include include using namespace std vect...
演算法導論 2 2分析演算法練習題 python描述
2.2分析演算法練習題 python描述 2.2 1 n 3 2.2 2 a 99 38 65 97 76 13 27 49 排序過程 a 13,38,65,97,76,99,27,49 a 13,27,65,97,76,99,38,49 a 13,27,38,97,76,99,65,49 a 13...