1. 估算演算法時間復雜度的方法
就是根據程序運行的最基本的操作的次數,記為T(n)
例:演算法:
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
{
c[ i ][ j ]=0; //該步驟屬於基本操作 執行次數:n的平方 次
for(k=1;k<=n;++k)
c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ]; //該步驟屬於基本操作 執行次數:n的三次方 次
}
}
則有 T(n)= n的平方+n的三次方,根據上面括弧里的同數量級,我們可以確定 n的三次方 為T(n)的同數量級
則有f(n)= n的三次方,然後根據T(n)/f(n)求極限可得到常數c
則該演算法的 時間復雜度:T(n)=O(n^3) 註:n^3即是n的3次方。
2. 演算法的時間復雜度計算問題
第一題:
int
i=1,k=100這條語句演算法步數是2步,執行頻率是1;
循環中,
k=k+1;這條語句每次演算法步數是1;執行頻率是n/2-1;
i+=2這條語句每次演算法步數是1;執行頻率是n/2-1;
所以演算法復雜度為1*(n/2-1)+1*(n/2-1)+2=n=o(n);
3. 演算法的時間復雜度
時間復雜度的表示: O(執行次數)
一個有序的元素列表查找某個元素可以用二分查找,每次取中間元素進行比較大小,直到相等。因為每次不符合時總會排除一半的元素 ,所以查找的次數為log2n,那麼時間復雜度為O(log2n)。如果是一個無序的元素列表,查找從位置0開始,那麼簡單查找的次數為n,那麼時間復雜度為O(n)。
除此之外快速排序為O(n*log2n),選擇排序為O(n*n)。
旅行演算法就是n個旅行地點,你可從某個地方出發到餘下某下一個地點,走完所有地點。從最開始時走有n個地點可以選擇,接下來再走就有n-1個地點可以選擇,這樣直到只有一個地點可以選擇。那麼所有你可走的路徑就是一個階乘,選擇復雜度為O( n!)。
關於數組和鏈表的操作。先說數組,因為你有了元素的索引,可以隨機訪問,你就能快速找到這個元素,而且所有元素的讀取都是一樣的步驟,所以讀取時間復雜度為O(1),數組的插入和刪除的時間復雜度為O(n),因為要移動元素。鏈表的特性是每個都存儲了下一個元素的地址,只能順序訪問。那麼讀取插入刪除的時間復雜度分別是O(n)、O(1)、O(1)。
4. 演算法的時間復雜度如何計算
求解演算法的時間復雜度的具體步驟是:
⑴ 找出演算法中的基本語句;
演算法中執行次數最多的那條語句就是基本語句,通常是最內層循環的循環體。
⑵ 計算基本語句的執行次數的數量級;
只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函數中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的系數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。
⑶ 用大Ο記號表示演算法的時間性能。
將基本語句執行次數的數量級放入大Ο記號中。
如果演算法中包含嵌套的循環,則基本語句通常是最內層的循環體,如果演算法中包含並列的循環,則將並列循環的時間復雜度相加。例如:
for (i=1; i<=n; i++)
x++;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
x++;
第一個for循環的時間復雜度為Ο(n),第二個for循環的時間復雜度為Ο(n2),則整個演算法的時間復雜度為Ο(n+n2)=Ο(n2)。
常見的演算法時間復雜度由小到大依次為:
Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)
Ο(1)表示基本語句的執行次數是一個常數,一般來說,只要演算法中不存在循環語句,其時間復雜度就是Ο(1)。Ο(log2n)、Ο(n)、Ο(nlog2n)、Ο(n2)和Ο(n3)稱為多項式時間,而Ο(2n)和Ο(n!)稱為指數時間。計算機科學家普遍認為前者是有效演算法,把這類問題稱為P類問題,而把後者稱為NP問題。
這只能基本的計算時間復雜度,具體的運行還會與硬體有關。
參考博客地址:http://blog.csdn.net/xingqisan/article/details/3206303
5. 演算法的時間代價
隨便解釋一下 ,解釋的不好見諒
一個演算法是解決某個問題的,比如n條數據排序問題,那麼對於這個問題「n」就是它的問題規模
那麼解決這個問題的演算法的代價一定是n的函數,記為T(n)
為了比較不同演算法之間的優劣,必須有一種方法將計算代價的函數進行變換,所以提出一種
概念叫做「復雜度」(好像是這么個意思,教材上的那個陰文單詞背不出了)
記作T(n)=O(f(n)),表示代價T(n)和f(n)一樣
比方說一個演算法用時T(n)=n天 ,另一個演算法用f(n)=100n天,可以證明
n=O(100n),那麼就認為兩個演算法復雜度相同(1天和100天復雜度還相同,....)
摟住的後半句就是具體定義,「存在正常數C和N,當問題規模n>N時,有T(n)<=Cf(n)」意思就是說如果有一個正的常數C,和一個正的常數N,當n>N 不等式T(n)<=Cf(n)恆成立,就「稱某演算法的時間(或空間)代價T(n)=O(f(n))」
比如一個演算法的代價是T(n)=100n ,那麼當n>=1時,100n <= 101 n
那麼就可以記作
T(n)=100n = O(n) 這里f(n)是f(n)=n,C=101,N=1
6. 什麼是演算法的時間復雜度
時間復雜度表面的意思就是代碼花費的時間,但是一般使用這個概念的時候,更注重的是隨著數據量增長,代碼執行時間的增長情況。一般認為一個基本的運算為一次運行算,例如加減乘除判斷等等
例1和例2時間復雜度都可以簡單認為是o(N),一般用時間復雜度的時候要取一個下限即可,不用那麼精確,可能你認為例1是o(2N)而例2是o(n),但實際上這兩者對於時間復雜度的作用來說沒區別,前面已經說了,時間復雜度關注的是數據量的增長導致的時間增長情況,o(2N)和o(n)在數據量增加一倍的時候,時間開銷都是增加一倍(線性增長)。
又例如兩重循環的時間復雜度是o(N的平方),N擴大一倍,時間復雜度就擴大4倍。所以時間復雜度主要是研究增長的問題,一般效率較好的演算法要控制在o(N)或者o(log2N)
7. 演算法的時間復雜度問題
這個演算法的時間復雜度是O(a.length^2)
當i = 0;子循環執行a.length-1
當i = 1;子循環執行a.length-1-1
當i = j;子循環執行a.length-1-j次
依次類推把它們加起來:知這個演算法的時間復雜度是O(a.length^2)
8. 演算法的時間復雜度
空間復雜度是指演算法在計算機內執行時所需存儲空間的度量。
我們一般所討論的是除正常佔用內存開銷外的輔助存儲單元規模.
本人: 空間復雜度跟指令條數沒有必然聯系,同一種演算法你可以寫得很長 也可以寫得很短 但是他們的復雜度是一樣的