第2章 演算法,其實有趣又有用

2021-08-02 14:03:51 字數 1642 閱讀 7848

演算法,解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。

輸入輸出: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...