算法分析
求解同一計算問題可能有許多不同的算法
選用的算法首先應該是
① 執行算法所耗費的時間;
② 執行算法所耗費的存儲空間
③ 算法應易於理解
一個占存儲空間小
更多的空間為代價;而為了節省空間可能要耗費更多的計算時間
① 若該程序使用次數較少
② 對於反復多次使用的程序
③ 若待解決的問題數據量極大
(
一個算法所耗費的時間=算法中每條語句的執行時間之和
每條語句的執行時間=語句的執行次數(即頻度(Frequency Count))×語句執行一次所需時間
算法轉換為程序後
若要獨立於機器的軟
有語句的頻度之和
【例
# define n
void MatrixMultiply(int A[a]
{ //右邊列為各語句的頻度
int i
( (2) for (j=0;j (3) C[i][j]=0; n 2 (4) for (k=0; k (5) C[i][j]=C[i][j]+A[i][k]*B[k][j]; n 3 } } 該算法中所有語句的頻度之和(即算法的時間耗費)為: T(n)=2n 3 +3n 2 +2n+1 (1.1) 分析: 語句(1)的循環控制變量i要增加到n,測試到i=n成立才會終止。tw.winGwit.Com故它的頻度是n+1。但是它的循環體卻只能執行n次。語句(2)作為語句(1)循 環體內的語句應該執行n次,但語句(2)本身要執行n+1次,所以語句(2)的頻度是n(n+1)。同理可得語句(3),(4)和(5)的頻度分別是n 2 ,n 2 (n+1)和n 3 。 算法MatrixMultiply的時間耗費T(n)是矩陣階數n的函數。 (2)問題規模和算法的時間復雜度 算法求解問題的輸入量稱為問題的規模(Size),一般用一個整數表示。 【例3.4】矩陣乘積問題的規模是矩陣的階數。 【例3.5】一個圖論問題的規模則是圖中的頂點數或邊數。 一個算法的時間復雜度(Time Complexity, 也稱時間復雜性)T(n)是該算法的時間耗費,是該算法所求解問題規模n的函數。當問題的規模 n趨向無窮大時,時間復雜度T(n)的數量級(階)稱為算法的漸進時間復雜度。 【例3.6】算法MatrixMultidy的時間復雜度T(n)如(1.1)式所示,當n趨向無窮大時,顯然有
這表明,當n充分大時,T(n)和n 3 之比是一個不等於零的常數。即T(n)和n 3 是同階的,或者說T(n)和n 3 的數量級相同。記作T(n)=O(n 3 )是算法MatrixMultiply的漸近時間復雜度。 數學符號"O"的嚴格的數學定義: 若T(n)和f(n)是定義在正整數集合上的兩個函數,則T(n)=O(f(n))表示存在正的常數C和n0,使得當n≥n0時都滿足0≤T(n)≤C·f(n)。
From:http://tw.wingwit.com/Article/program/sjjg/201311/23403.html