一般情況下,演算法中基本語句重複執行的次數是問題規模n
nn的某個函式f(n
)f(n)
f(n)
演算法的時間量度記做
t (n
)=o(
f(n)
)t(n)=o(f(n))
t(n)=o
(f(n
))它表示問題規模n
nn的增大,演算法執行時間的增長率和f(n
)f(n)
f(n)
的增長率相同,稱作演算法的漸近時間複雜度,簡稱時間複雜度。
演算法的時間複雜度就是未知量n
nn在趨近於無窮大時語句執行次數的最大者。
《小歪翻譯,不喜勿噴》
對for(i = 0; i < n; i++):起始為零加一次,(大)擴前比後多一次;
一般的:
1.設該語句執行x次終止;
2.找出第x次的表示式;
3.由終止條件x = f(n);
1.設n
nn是描述問題規模的非負整數,下列程式段的時間複雜度是
x =0;
while
(n >=
(x +1)
*(x +1)
) x = x+
1;
a.(log n) \qquad
b.o(n1/
2n^
n1/2
)\qquad
c.o(n)\qquad
d.o(n
2n^2
n2)解:對於迴圈體,我們只考慮小括號內的執行次數。因為小括號內的比較大。按步驟來
1.設小括號的語句執行x次終止
2.第一次:n
>0×
0n > 0 × 0
n>0×
0;\,\,\,
第二次: n
>1×
1n > 1 × 1
n>1×
1;\,\,\,\,\,\,
······
第 x次
\,\,\,\,第x次
第x次:n
>x∗
xn>x*x
n>x∗
x;3.第x次時終止,即x
2x^2
x2n 1/
2n^
n1/2
所以x的量級是b。(遠大於》,遠小於《和大於》,小於《是有區別的)
int s =
0,i =
0;j =0;
//1for
(i =
0;i <
3* n +
5;i++
)//2
}
求語句1234的執行次數和程式的時間複雜度
解:對語句1,明顯只執行1次
\qquad
對語句2,由於是從0開始,所以執行次數加1;即:3n+5次
\qquad
對語句3.由於在迴圈體中大括號的後面,所以執行少了一次,而它本身要執行2n-4次,所以總體3執行了(3n+5)(2n-3)次;
同理語句4執行了(3n+5)(2n-3)-1次
所以該結構時間複雜度為o(n
2)
o(n^2)
o(n2
)
int a =1;
while
(a <= n)
//0int m =
1,n =
0,i =0;
for(i =
0; i <= n; i++
)//1
for(i =
0; i < m; i++
)//2
解:語句0:
1.設執行x次終止
2.第一次:122*22
x2^x
2x\quad
2
x2^x
2x>n;n2
n\log_2
log2n
所以時間複雜度為o(l
ogn)
o(log n)
o(logn
);語句1易知語句1執行了n+2次;(有i<=n再加一次)
時間複雜度為o(n
)o(n)
o(n)
語句2\qquad
易知語句2執行了m次;
而語句1中的迴圈體知m=n!
所以時間複雜度為o(n
!)
o(n!)
o(n!
)其實對於時間複雜度,我們一點也不關心語句執行了多少次,只關心語句執行次數的量級。我們只要知道迴圈變數i從一直加到n是線性階,迴圈體中i成倍增長為對數階。i在迴圈體內線性增加,在條件中倍增為根式階,記住幾個特例,就嫩速度知道結果。當然,試著給個口訣。
點增平方根式階(迴圈體內+幾,比線性增的差的可以說是點增,迴圈條件平方增加。)
變數線增對數階(變數線性乘幾)
時間複雜度的計算問題
時間複雜度 注意的兩點 1 只保留高階項 2 係數直接捨棄 如果是常數,直接為1。例子 1 具體認真的算 for i 1 i n i 1 n n for j 1 j n j i 1時,j可以為1,2 到n.1 n n c i j n n 最終計算結果為f n 3n 2 3n 1 o f n o n ...
時間複雜度計算
定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,注意它是某乙個演算法的時間複雜性。大o表示只是說有上界,由定義如...
時間複雜度計算
1,演算法複雜度是在 資料結構 這門課程的第一章裡出現的,因為它稍微涉及到一些數學問題,所以很多同學感覺很難,加上這個概念也不是那麼具體,更讓許多同學複習起來無從下手,下面我們就這個問題給各位考生進行分析。首先了解一下幾個概念。乙個是時間複雜度,乙個是漸近時間複雜度。前者是某個演算法的時間耗費,它是...