算法的基本概念
算法是對特定問題求解步驟的一種描述,它是指令的有限序列。具有下列五個重要特性:
- 有窮性:一個算法必須在有限的步驟結束,每一步都有在又窮的時間內結束
- 確定性:相同的輸入只能得到相同的輸出
- 可行性:可以被執行的操作
- 輸入:有零個或多個輸入
- 輸出:有一個或多個輸出
一個好的算法應該達到一下目標:
- 正確性:能夠正確解決問題
- 可讀性:具有良好的可讀性,幫助別人理解
- 健壯性:輸入非法數據,能夠正確處理
- 效率與低存儲量需求:儘量少的時間和空間
算法效率的度量
1、時間複雜度
一個語句的頻度是指該語句在算法中被重複執行的次數。算法中所有語句的頻度之和記爲T(n)。時間複雜度主要分析T(n)的數量級。算法中基本運算(最深層循環內的語句)的頻度記爲f(n),因此時間複雜度記爲:
T(n)=O(f(n))
分析一個程序的時間複雜性時,有以下兩條規則:
a) 加法規則
T(n)=T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n),g(n)))
b)乘法規則
T(n) = T1(n) * T2(n) = O(f(n)) * O(g(n)) = O(f(n) * g(n))
常見的時間複雜度
O(1)<O(log(n))<O(n)<O(nlog(n))<O(n * n)<O(n * n * n)
2、空間複雜度
空間複雜度**S(n)**定義爲該算法所耗費的存儲空間。