演算法,解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。
輸入輸出:0或多個輸入,1或多個輸出
有窮:執行有限步驟後,自動結束而不會出現無限迴圈
確定:每一步驟都具有確定含義,不存在二義性
可行:每一步都在有限次數內完成
基本特性定義了乙個演算法的雛形,但乙個「好」演算法還需要具備更多的特性。就像房子建好後,要變成乙個舒服的居住環境,還需要做更多的裝修與裝飾工作,也就是所謂的「設計」。
正確性——輸入、輸出、加工處理無歧義性,能正常反映問題的需求、能得到問題的正確答案。
分為四個層次:
1.語法無錯
2.對合法輸入能產生滿足要求的輸出結果
3.對非法輸入能得出滿足規格說明的結果
4.對精心選擇的、甚至故意刁難的測試資料,都有滿足要求的輸出結果
一般情況下,把層次3作為乙個演算法是否正確的標準。
可讀性——便於閱讀、理解和交流、維護
健壯性——當輸入資料不合法時,演算法也能做出相關處理,而不是產生異常或莫名奇妙的結果。
時間效率高和儲存量低
事後統計——利用計算機計時器對不同演算法編制的程式的執行時間進行比較
不科學、不準確,存在較大缺陷,實際中不使用。
事前分析估算——在程式編制前,依據統計方法對演算法進行估算
根據經驗,程式執行時間取決於下列因素:
1.演算法採用的策略、方法 決定演算法好壞的根本
2.編譯產生的**質量 主要由軟體來支援
3.問題的輸入規模 實際問題決定
4.機器執行指令的速度 取決於硬體效能
以上分析可以看出,
乙個程式的執行時間,依賴於演算法的好壞和問題的輸入規模。
大o記法:
o[1]常數階 < o[n]線數階 < o[n2]平方階 < o[nlogn]對數階 o(
1)logn
)n)nlog
n)n2
)n3)2n
)n!)nn)
推導大o階:
1.常數1取代執行時間中的所有加法常數
2.在修改後的執行次數函式中,只保留最高端項
3.如果最高端項存在且不是1,則去除與這個項相乘的常數
比如,f(n
)=3n
2+2n
+1最終可以記為 o(
n2)
理解大o推導不難,難的是分析數列的一些運算,更多的是考察你的數學知識和能力
一台老式cpu的計算機執行 o(
n)的程式和一台速度提高100倍的新式cpu執行 o(
n2) 的程式。最終效率高的勝利方式卻是老式cpu的計算機,原因在於演算法的優劣直接決定了程式執行的效率。
作者的話:
利用演算法分析工具,改進自己的**,讓計算機輕鬆一點,這樣你就更加勝人一籌
第 2 章 演算法
演算法 是解決待定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。指演算法在執行有限的步驟後,自動結束而不會出現無限迴圈,並且每乙個步驟在可接受的時間內完成。演算法的每一步驟都具有確定的含義,不會出現二義性。演算法的每一步都必須是可行的,也就是說,每一步都能夠通過...
第2章 演算法分析
知識點 2.1 數學基礎 法則1 如果t1 n o f n 且t2 n o g n 那麼 a t1 n t2 n o f n g n 或者t1 n t2 n o max f n g n b t1 n t2 n o f n g n 法則2 如果t n 是乙個k次多項式,則t n n k 法則3 對於任...
第2章 演算法分析
最大子串行和問題的求解 演算法1 時間複雜度為o n 3 1 public static int maxsubsum1 int a 21617 return maxsum 18 演算法2 時間複雜度為o n 2 1 public static int maxsubsum2 int a 216 171...