1. 程式人生 > >演算法基礎-基礎

演算法基礎-基礎

前言

大學沒有開演算法課程,還是要自己學學。

演算法的特徵

  • 有窮性
    • 演算法執行到有窮步之後必須終止。
  • 確定性
    • 演算法的每一步驟必須有確切的定義。要執行的每一個動作都是清晰的、無歧義的。歐幾里德演算法規定了m和n都是正整數,從而保證了演算法能夠確定地執行。
  • 輸入
    • 一個演算法有0個或多個輸入,作為演算法開始執行前的初始值,或初始狀態。所謂0個輸入是指演算法本身定出了初始條件。
  • 輸出
    • 一個演算法有一個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的。
  • 可行性
    • 在有限時間內完成計算過程。

演算法的複雜性

  一般把時間複雜性和空間複雜性分開,並分別用 T S 來表示:演算法的時間複雜性一般表示為 T (

n ) ;演算法的空間複雜性一般表示為 S ( n ) 。其中 n 是問題的規模(輸入大小)。

  演算法的時間複雜性(Time Complexity)是指執行演算法所需要的時間。
一般來說,計算機演算法是問題規模n的函式f(n),演算法的時間複雜性也因此記做

T ( n ) O ( f ( n ) ) ,問題的規模 n 越大,演算法執行的時間的增長率與 f ( n ) 的增長率正相關,稱作漸進時間複雜性(Asymptotic Time Complexity)。

  演算法的空間複雜性(Space Complexity)是指演算法需要消耗的記憶體空間。

空間複雜度分析 說明
靜態分析 一個演算法靜態使用的儲存空間,稱為靜態空間。 靜態分析的方法比較容易,只要求出演算法中使用的所有變數的空間,再摺合成多少空間儲存單位即可。
動態分析。 一個演算法在執行過程中,必須以動態方式分配的儲存空間是指在演算法執行過程中分配的空間,稱為動態空間。 動態空間主要是儲存中間結果或操作單元所佔用空間。

國內主要的幾個線上測試題庫

學校 網址
浙江大學(ZJU) http://acm.zju.edu.cn
北京大學(PKU) http://poj.org
杭州電子科技大學(HDU) http://acm.hdu.edu.cn
浙江工業大學(ZJUT) http://acm.zjut.edu.cn

國外的幾個線上測試題庫

學校 網址
俄羅斯烏拉爾大學(URAL) http://acm.timus.ru
俄羅斯薩拉托夫大學(SGU) http://acm.sgu.ru
西班牙瓦拉杜利德大學(UVA) http://acm.uva.es
美國USACO http://train.usaco.org/usacogate