我遇到了算法的時間複雜性問題。分析運行時間,大O
例如下面的Haskell代碼,它將對列表進行排序。
sort xs
|isSorted xs= xs
|otherwise= sort (check xs)
where
isSorted xs=all (==True) (zipWith (<=) xs (drop 1 xs))
check [] =[]
check [x]=[x]
check (x:y:xs)
|x<=y = x:check (y:xs)
|otherwise=y:check (x:xs)
所以對於n是列表和t_isSorted(n)的運行時間函數的長度:有一個恆定T_DROP(N)= c和T_ALL(N)= N,t_zipWith(N)= N :
t_isSorted(n)= c + n +n
對於t_check:
t_check(1)=c1
t_check(n)=c2 + t_check(n-1), c2= for comparing and changing an element
.
.
.
t_check(n)=i*c2 + tcheck_(n-i), with i=n-1
=(n-1)*c2 + t_check(1)
=n*c2 - c2 + c1
而且究竟如何我一定要那些拿到t_sort(n)的結合?我想在最壞的情況下,排序xs必須運行n-1次。
爲什麼downvote? –