算法是計算機解決問題的步驟。是以人類可以理解的方式描述的,用於編寫程序之前。程序是計算機可以理解的語言。同一個算法,不同的編程語言,程序就會不同。不同寫程序的人,編程也會不同。
問題:對n個數字進行排序
算法設計:
- 方法1:全排列算法。
- 生成n個數的數列(不和前面重復)
- 如果生成的數列從小到大排序,將其輸出,否回1
- 方法2:選擇排序
- 找n個中最小一個,放最左邊
- 找n-1中找最小一個,放第2個位置
- 方法3:......
算法的選擇:運行時間,空間資源...
示例:
方法1:運氣好,很快出現正確結果,運氣不好,最后一個出現正確結果。計算時間是
\[n!=n(n-1)(n-2)\cdots3\cdot2\cdot1\]
方法2:計算時間
\[n+(n-1)+(n-2)+\cdots3+2+1=\frac{n(n-1)}{2}\leqslant n^{2}\]
方法1大於10^20年,宇宙大爆炸到現在才10^11年。方法2是2ns。算法對計算方法的影響很大。
如何計算運行時間?
使用“步數”來描述運行時間,“1步”就是計算的基本單位。
運行時間的表示方法
O這個符號的意思是“忽略重要項以外的內容”,讀音同order。
\[O(n^2)\]算法的運行時間最長也就是n^2的常數倍