算法是爲了解決某類問題而規定的一個有限長的操做序列。處理問題的策略node
算法是求解問題的一系列計算步驟,用來將輸入數據轉換成輸出結果 :算法
若是一個算法對其每個輸入實例,都能輸出正確的結果並中止,則稱它是正確的。編程
算法與數據結構既有聯繫又有區別。數組
聯繫:數據結構是算法設計的基礎。算法的操做對象是數據結構,在設計算法時,一般要構建適合這種算法的數據結構。數據結構設計主要是選擇數據的存儲方式,如肯定求解問題中的數據採用數組存儲仍是採用鏈表存儲等。算法設計就是在選定的存儲結構上設計一個知足要求的好算法。數據結構
區別:數據結構關注的是數據的邏輯結構、存儲結構以及基本操做,而算法更多的是關注如何在數據結構的基礎上解決實際問題。算法是編程思想,數據結構則是這些思想的邏輯基礎。post
算法五個重要特性
算法必須知足五個重要特性算法五個要素的確切含義spa
1.有窮性(有限性)
對於任意一組合法輸入值,在執行有窮步驟以後必定能結束,即:算法中的每一個步驟都能在有限時間內完成。算法與程序區別:程序沒有有窮性設計
2.肯定性
對於每種狀況下所應執行的操做,在算法中都有確切的規定,使算法的執行者或閱讀者都能明確其含義及如何執行。而且在任何條件下,算法都只有一條執行路徑。調試
3.可行性
算法中的全部操做都必須足夠基本,均可以經過已經實現的基本操做運算有限次實現之。對象
4.有輸入
做爲算法加工對象的量值,一般體現爲算法中的一組變量。有些輸入量須要在算法執行過程當中輸入,而有的算法表面上能夠沒有輸入,實際上已被嵌入算法之中。
5.有輸出
它是一組與「輸入」有肯定關係的量值,是算法進行信息加工後獲得的結果,這種肯定關係即爲算法的功能。
設計算法時,一般應考慮達到的目標(判斷好壞的標準)
1. 正確性
首先,算法應當知足以特定的「規格說明」方式給出的需求。其次,對算法是否「正確」的理解能夠有如下四個層次:a.程序中不含語法錯誤;b.程序對於幾組輸入數據可以得出知足要求的結果;c.程序對於精心選擇的、典型、苛刻且帶有刁難性的幾組輸入數據可以得出知足要求的結果;d.程序對於一切合法的輸入數據都能得出知足要求的結果;一般以第 c 層意義的正確性做爲衡量一個算法是否合格的標準。
2. 可讀性
算法主要是爲了人的閱讀與交流,其次纔是爲計算機執行,所以算法應該易於人的理解;另外一方面,晦澀難讀的程序易於隱藏較多錯誤而難以調試。
3. 健壯性
當輸入的數據非法時,算法應當恰當地做出反映或進行相應處理,而不是產生莫名奇妙的輸出結果。而且,處理出錯的方法不該是中斷程序的執行,而應是返回一個表示錯誤或錯誤性質的值,以便在更高的抽象層次上進行處理。
4. 高效率與低存儲量需求
一般,效率指的是算法執行時間;存儲量指的是算法執行過程當中所需的最大存儲空間,二者都與問題的規模有關。
5.可以使用性
算法分析
算法分析是分析算法佔用計算機資源的狀況。
因此算法分析的兩個主要方面是分析算法的時間複雜度和空間複雜度。