[TOC]
# 什么是算法
**算法就是計算或解決問題的步驟**,有以下特點:
* 輸入項:有一個或多個輸入(無輸入時,算法本身定義了初始條件)
* 確切性:每一步都有明確定義
* 可行性:每一步都可以在有限時間內完成
* 有窮性:在有限步后終止
* 輸出項:有一個或多個輸出,沒有輸出的算法是毫無意義的
這就類比做菜,我們需要遵循食譜的步驟才能做出特定的料理。食材配料是輸入,食譜里的翻炒加料是【步】,炒熟后即終止,最終可以吃的菜就是輸出。
# 算法和程序的區別
算法是以人類能夠理解的方式來描述的,不可以直接在計算機上運行;程序是以計算機能夠解釋的編程語言編寫而成的,可以在計算機上運行。
算法需要用程序來表達給計算機。
# 運行時間的計算和表示
求得運行時間最直接的方法就是在計算機上運行一下程序,記錄下其花費的時間。但是,就算是同樣的算法,由于編程語言和計算機的不同,花費的時間也會產生偏差。
### 如何計算
我們**使用『步驟』來描述運行時間,『1步』就是基本單位**。這樣我們就可以**用『計算從開始到結束總共執行了多少步』來計算算法的運行時間**。
### 如何表示
如果某算法的步數為n,則運行時間的表示方法為:
O(n)
舉例,把大象裝進冰箱里:①打開冰箱門 ②將大象推進去 ③關上冰箱門
在這個例子里,我們的算法運行需要3步,則該算法的運行時間為:
O(3)
# 如何選擇算法
計算機只能高速執行一些基本命令如『做加法』或『在指定內存地址上保存數據』等,將一個復雜問題轉化成基本命令的組合可以是多種多樣的,從而解決某一個問題的算法不止一個。
在算法的選擇上,我們的考量標準也會各有不同:
* 對于內存小的計算機,更偏向于在運行過程中不需要耗費太多空間資源的簡單算法
* 一般來說,不考慮機器性能,我們最為重視的是算法的運行時間
# 代碼庫地址
[https://github.com/liuzhen153/play-algorithm-python](https://github.com/liuzhen153/play-algorithm-python)