表示時間複雜度的階有:
o(1)
:常量時間階
o (n):線性時間階
o(㏒n) :對數時間階
o(n㏒n) :線性對數時間階
o (nk)
: k≥2 ,k次方時間階
例1 兩個n階方陣的乘法
for(i=1
,i<=n; ++i)
for(j=1; j<=n; ++j)
由於是乙個三重迴圈,每個迴圈從1到n,則總次數為: n×n×n=n3 時間複雜度為t(n)=o(n3)
【立方階】
例2 將x自增看成是基本操作,則語句頻度為1,即時間複雜度為o(1) 。【常量階】
如果將s=0也看成是基本操作,則語句頻度為2,其時間複雜度仍為o(1),即常量階。
例3for(i=1; i<=n; ++i)
語句頻度為:2n,其時間複雜度為:o(n) ,即為【線性階】。
例4 for(i=1; i<=n; ++i)
for(j=1; j<=n; ++j)
語句頻度為:n*n*2=2n2 ,其時間複雜度為:o(n2) ,即為【平方階】。
定理:若
a(n)=amnm +am-1nm-1+…+a1n+a0
是乙個m
次多項式,則
a(n)=o(nm)
例5 for(i=2;i<=n;++i)
for(j=2;j<=i-1;++j)
語句頻度為:
1+2+3+…+n-2=(1+n-2) ×(n-2)/2
=(n-1)(n-2)/2 =n2-3n+2
∴時間複雜度為o(n2),即此演算法的時間複雜度為【平方階】。
乙個演算法時間為o(1)的演算法,它的基本運算執行的次數是固定的。因此,總的時間由乙個常數(即零次多項式)來限界。而乙個時間為o(n2)的演算法則由乙個二次多項式來限界。
以下六種計算演算法時間的多項式是最常用的。其關係為:
o(1) < o(
㏒n) < o(n) < o(n㏒n) < o(n2) < o(n3)
指數時間的關係為:
o(2n) < o(n!) < o(nn)
當n取得很大時,指數時間演算法和多項式時間演算法在所需時間上非常懸殊。
例1:素數的判斷演算法。
void prime( int n)
巢狀的最深層語句是i++;其頻度由條件( (n% i)!=0 && i*1.0< sqrt(n) )決定,顯然i*1.0< sqrt(n) ,時間複雜度o(n1/2)。
或者說是o(sqrt(n));
例2:氣泡排序法。
void bubble_sort(int a
,int n) }
最好情況:0次
最壞情況:1+2+3+⋯+n-1=n(n-1)/2
平均時間複雜度為: o(n2)
【平方階】
時間複雜度計算
定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,注意它是某乙個演算法的時間複雜性。大o表示只是說有上界,由定義如...
時間複雜度計算
1,演算法複雜度是在 資料結構 這門課程的第一章裡出現的,因為它稍微涉及到一些數學問題,所以很多同學感覺很難,加上這個概念也不是那麼具體,更讓許多同學複習起來無從下手,下面我們就這個問題給各位考生進行分析。首先了解一下幾個概念。乙個是時間複雜度,乙個是漸近時間複雜度。前者是某個演算法的時間耗費,它是...
計算時間複雜度
求解演算法的時間複雜度的具體步驟是 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。計算基本語句的執行次數的數量級 只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能...