設計出高品質的演算法,並研究演算法所耗費的計算資源與問題規模之間的函數關係。演算法設計與演算法分析是不可分割的一個整體。演算法分析的物件是被設計出的演算法,而每一個被設計出的演算法隻有經過演算法分析,才能評價其品質之優劣。

  計算效率是一個古老的研究課題。科學技術的發展使得計算日趨複雜,計算量越來越大,許多理論上可計算的問題,常常由於其計算量巨大佈變成瞭現實不可計算的問題,這就產生瞭理論可計算而現實不可計算的矛盾。20世紀60年代以來,隨隨著各個領域算法研究工作的發展,產生瞭一個嶄新的研究領域,這就是算法的設計與分析。在這一方面已取巨大的進展,它的研究成果對於計算機在各個領域的應用起著重要的作用。

  基本內容 按照算法所處理的對象進行分類,算法設計與分析主要有數值算法和非數值算法兩大領域。數值算法主要包括多項式計算、矩陣計算、有限域計算、數論計算等有關數值計算的算法問題。非數值算法主要包括整序搜索、幾何問題的計算、離散結構的計算、模式匹配等有關非數值計算的算法問題。

  按照計算方式進行分類,則可分為串行算法和並行算法,還可以分為確定型算法、非確定型算法、交錯型算法、隨機型算法等(見計算復雜性理論)。

  另外,還有關於近似算法的研究。對於已經證明不存在快速算法,或者至今還未找到快速算法的問題,例如NP完全問題(見NP完全性),與其花費大量的時間去尋找精確解,不如花費少量的時間去尋找近似解。

  基本概念 設計算法與分析算法的復雜度,都與計算模型有關,大多屬於隨機存取機器模型,這是一種確定型的串行計算模型。

  隨機存取機器是一種理想的計算機,由一個累加器、一個存儲器和一個程序組成。存儲器具有無限多個寄存器,每個寄存器可以存放任意大的一個自然數。程序是由一些最基本的指令所組成的序列,這些指令通常是指包括直接尋址與間接尋址在內的加、減、乘、除、取數、存數、條件轉移和停機。所有的運算和邏輯判斷都在累加器中進行。

  問題的大小,也稱問題的規模,通常用一個自然數作為隨機存取機器輸入數據量多少的度量。

  時間復雜度和空間復雜度分別表示對於規模為 n的輸入問題、隨機存取機器所耗費的時間與空間,它們都是 n的函數。常用的時間和空間的度量方式是均勻耗費標準:執行一條指令算作耗費一個單位的空間,使用一個寄存器算作耗費一個單位的空間;另一種度量方式是對數耗費標準(見隨機存取機器模型)。復雜度函數的計算方式又有兩種:規模為n的所有問題的復雜度的最大值稱為最環情況復雜度;規模為n的所有問題的復雜度的平均值稱為平均情況復雜度。當規模n增加時,復雜度的量級即極限屬性稱為漸近復雜度。由於理論計算機與現實計算機之間的差異,以及不同的現實計算機之是的差異,也由於算法設計與分析主要關心規模 n比較大的情況,通常討論的是漸近復雜度。

  算法設計 算法設計的任務是對各類具體的問題設計高質量的算法,以及研究設計算法的一般規律和方法。常用的算法設計方法主要有分治法、動態規劃、貪婪法和回溯法等。

  分治法 把一個大規模問題劃分成幾個子問題,對每一個子問題采用同樣的處理方法,求出各子問題的解答,再把這些子問題的解答組合成整個問題的解答。

  動態規劃 當整個問題的解答無法由少數幾個子問題的解答組合得出,而依賴於大量子問題的解答,並且子問題的解答又需要反復利用多次時,系統地列表記錄各個子問題的解答,據此求出整個問題的解答。

  貪婪法 在算法的每一步驟,都采取當前看來可行的或最優的策略。這是一種最直接的方法,隻有在一些特殊情況下,貪婪法才能求出問題的解答。對於錄求最優解的問題、貪婪法通常隻能求出近似解。

  回溯法和分叉截斷法 為瞭尋求問題的解答,有時需要在所有的可能性(稱為候選對象)中進行系統的搜索,例如在尋求最優解的問題中,就常碰到這種情況。這時,須把各種候選對象組織成一棵樹,每個樹葉對應著一個候選對象,於是每個內部頂點就表示若幹個候選對象(即在此頂點下面的樹葉)。回溯法是從樹根開始按深度優先搜索的原則向下搜索,即沿著一個方向盡量向下搜索,直到發現此方向上不可能存在解答時,就退到上一個頂點,沿另一個方向進行同樣的工作。分叉截斷法也是從樹根開始向下搜索,不同的是,分叉截斷法常常利用一個適當選取的評估函數,來決定應該從哪一點開始下一步搜索(分叉),以及哪一點下方不可能存在解答,從而這點的下方不必進行搜索(截斷)。評估函數選得好,就會很快地找到解答,選得不好,就可能找不到解答或者找到的不是最優解(有時它可以作為最優解的一個近似解)。

  算法分析 對於設計出的每一個具體的算法,利用數字作為工具討論它的各種復雜度,就是算法分析的主要任務。復雜度分析的結果可以作為評價算法質量的標準之一,有時也可以為改進算法的方向提供參考。分析算法的復雜度需要較強的數學技巧,針對不同的算法,采用不同的分析方法。

  討論某些問題類在一定的計算模型中的任意算法的復雜度至少是多大,也是算法分析的一個內容,這就是下界問題。

  通常認為,多項式復雜度的算法是現實可行的,而指數復雜度的算法是現實不可行的。

  

參考書目

 A.V.Aho,J.E.Hopcroft,J.D.Ullman,The Design and Analysis of Computer Algorithms,Addison Wesley,Reading,Mass.,1974.

 D.E.Knuth,The Art of Computer Programming,Vol.1~3,Addison Wesley,Reading,Mass.,1968~1973.