提到算法,必須提到數據結構,我們要知道一個著名公式:
數據結構 + 算法 = 程序我們先看看下面這張圖:
算法是什麼?算法是一個有窮規則(或語句、指令)的有續集和。他確定了解決某一問題的一個運算序列,簡單的說,就是
解決某一問題的步驟描述。
一、算法的特性1)有窮性 ——算法執行的步驟(或規則)是有限的;
2)確定性 ——每個計算步驟無二義性;
3)可行性——每個計算步驟嫩鞏固在有限的時間內完成;
4)輸入——算法有一個或多個外部輸入;
5)輸出——算法有一個或多個輸出;
二、如何評價一個算法的好壞1)消耗時間的多少;
2)消耗存儲空間的多少;
3)算法的設計是否容易理解,是否容易編程實現,方便調試和維護;
三、時間復雜度 時間復雜度的概念:
1)問題的規模:輸入數據量的大小,用n來表示;
2)算法的時間復雜度:算法消耗時間,它是問題規模的函數 T (n)。
1、語句的頻度語句的頻度定義為可執行語句在算法(或程序)中重復執行的次數。若某語句執行一次的時間為t ,執行次數為f,則該語句所耗時間的估計為 t * f 。
以下面程序為例,求兩個N階方陣乘積:
[cpp] view
plain copy
void MATRIXM(A,B,C)
{
float A
,B
,C
;
int i,j,k; // 語句頻度
for(i = 0;i < n; i++) // n+1
for(j = 0;j < n;j++) // n(n+1)
{
C[i][j] = 0; // n*n
for(k = 0; k < n;k++) // n*n(n+1)
C[i][j] = c[i][j]+A[i][k]*B[k][j]; // n*n*n
}
}
2、算法的時間復雜度 算法的時間復雜度定義為算法中可執行語句的頻度之和,記為T(n)。T(n) 是算法所需時間的一種估計,其中n為問題的規模(或大小、體積)。如上面的例子中,問題的規模n為矩陣的階,該算法的時間復雜度為:
T(n) = (n+1)+n(n+1)+n*n+n*n(n+1)+n*n*n = 2*n*n*n + 3*n*n +2*n +1當n趨於無窮大時,lim(T(n)/(n*n*n) =2,故T(n)與n*n*n為同階無窮大,或者說T(n) 與 n*n*n成正比、T(n)的量級為n*n*n,記為
T(n) = O(n*n*n);問題規模n的某個函數f(n),
T(n) = O (f(n))它表示歲問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同。