演算法是程式的靈魂,想學好演算法就必須先搞懂時間複雜度
算時間複雜度就是算基本語句條數
5個計算時間複雜度基礎例題
for(int i=0; ii=0時,j=0,j迴圈執行n次
i=1時,j=1,j迴圈執行n-1次
i=2時,j=2,j迴圈執行n-2次
推廣到i=n-1時,j=n-1,j迴圈執行1次
sn=n+n-1+n-2+...+1=n×(n+1)/2
時間複雜度為:o(n²)
i=0;
while((i+1)*(i+1)<=n)
第1次,i=1
第2次,i=2
推廣到第x次,i=x
設第x次退出迴圈,則(i+1)×(i+1)>n
x=i>(√n)-1 次
時間複雜度為:o(√n)
int i=1;
while(i第1次:i=21
第2次:i=22
第3次:i=23
......
第x次:i=2x
設第x次退出迴圈,則有i=2x ≥ n
取對數解得x=logn,共執行logn次
時間複雜度為:o(logn)
for(int i=1; i<=n; i++)
}}
粗略的估計:
最外層i迴圈n次,j迴圈最壞的情況執行n次,k迴圈最壞的情況也執行n次,即時間複雜度為o(n³)
詳細計算:
i=1時,j、k迴圈都只執行一次,輸出語句執行1次
i=2時,j迴圈[1,2]執行2次,每一次分別有乙個k迴圈,分別是[1,1]、[1,2]輸出語句執行1+2次
i=3時,j迴圈[1,3]執行3次,每一次分別有乙個k迴圈,分別是[1,1]、[1,2]、[1,3]輸出語句執行1+2+3次
可以推廣到
i=n時,j迴圈[1,n]執行n次,每一次分別有乙個k迴圈,分別是[1,1]、[1,2]......[1,n]輸出語句執行1+2+......+n次
總共:sn=(1)+(1+2)+(1+2+3)+......+(1+2+3+...+n)
1~n項和取n²放大一點看就是n個這樣的n²相加,即n³
時間複雜度為:o(n³)
for(int i=0; i粗略的估計
i=0時,j=0,內迴圈n次
即時間複雜度為o(n²)
詳細計算
i=0時,j=0,[0,n)內迴圈n次
i=1時,j=2,[2,n)內迴圈n-2次
i=2時,j=4,[4,n)內迴圈n-4次
推廣到i=(n/2)-1,j=n-2,[n-2,n)內迴圈2次
i=n/2時,j=n,跳出迴圈
綜上sn=n+n-2+n-4+...+2
共n/2項,首項為n,公差-2
sn=(((n/2)×[(n/2)-1)]×(-2)/2) + (n/2)×n
輸出語句執行了(n²+2n)/4次
時間複雜度為:o(n²)
一定要學會算時間複雜度
很重要很重要
很重要
時間複雜度計算
定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,注意它是某乙個演算法的時間複雜性。大o表示只是說有上界,由定義如...
時間複雜度計算
1,演算法複雜度是在 資料結構 這門課程的第一章裡出現的,因為它稍微涉及到一些數學問題,所以很多同學感覺很難,加上這個概念也不是那麼具體,更讓許多同學複習起來無從下手,下面我們就這個問題給各位考生進行分析。首先了解一下幾個概念。乙個是時間複雜度,乙個是漸近時間複雜度。前者是某個演算法的時間耗費,它是...
計算時間複雜度
求解演算法的時間複雜度的具體步驟是 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。計算基本語句的執行次數的數量級 只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能...