c語言快速冪
㈠ 如何計算時間復雜度
1、先找出演算法的基本操作,然後根據相應的各語句確定它的執行次數,再找出T(n)的同數量級(它的同數量級有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出後,f(n)=該數量級,若T(n)/f(n)求極限可得到一常數c,則時間復雜度T(n)=O(f(n))。
2、舉例
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的三次方)
),線性階O(n),線性對數階O(nlog2n),平方階O(n^2),立方階O(n^3),...,
k次方階O(n^k),指數階O(2^n)。隨著問題規模n的不斷增大,上述時間復雜度不斷增大,演算法的執行效率越低。
關於對其的理解
《數據結構(C語言版)》 ------嚴蔚敏 吳偉民編著 第15頁有句話「整個演算法的執行時間與基本操作重復執行的次數成正比。」
基本操作重復執行的次數是問題規模n的某個函數f(n),於是演算法的時間量度可以記為:T(n) = O(f(n))
如果按照這么推斷,T(n)應該表示的是演算法的時間量度,也就是演算法執行的時間。
而該頁對「語句頻度」也有定義:指的是該語句重復執行的次數。
如果是基本操作所在語句重復執行的次數,那麼就該是f(n)。
上邊的n都表示的問題規模。