1.1.2 算法設計基本方法
計算機解題的過程實際上是在實施某種算法,這種算法稱為計算機算法。
常用算法設計方法:
(1) 列舉法
列舉法的基本思想是,根據提出的問題,列舉所有可能的情況,並用問題中給定的條件檢驗哪些是需要的,哪些是不需要的。
列舉法的特點是算法比較簡單。但當列舉的可能情況較多時,執行列舉算法的工作量將會很大。
在用列舉法設計算法時,使方案優化,盡量減少運算工作量,是應該重點注意的。
在設計列舉算法時,只要對實際問題進行詳細的分析,將與問題有關的知識條理化、完備化、系統化,從中找出規律;或對
所有可能的情況進行分類,引出一些有用的信息,是可以大大減少列舉量的。
列舉算法是計算機算法中的一個基礎算法。
(2) 歸納法
歸納法的基本思想是,通過列舉少量的特殊情況,經過分析,最后找出一般的關系。
歸納就是通過觀察一些簡單而特殊的情況,最后總結出一般性的結論。
(3) 遞推
所謂遞推,是指從已知的初始條件出發,逐次推出所要求的各中間結果和最后結果。
其中初始條件或是問題本身已經給定,或是通過對問題的分析與化簡而確定。
遞推關系式往往是歸納的結果。
(4) 遞歸
人們在解決一些復雜問題時,為了降低問題的復雜程度(如問題的規模等),一般總是將問題逐層分解,最后歸結為一些最簡單
的問題。這種將問題逐層分解的過程,實際上並沒有對問題進行求解,而只是當解決了最后那些最簡單的問題后,再沿着原來分解
的逆過程逐步進行綜合,這就是遞歸的基本思想。遞歸的基礎也是歸納。
自己調用自己的過程稱為遞歸調用過程。
遞歸分為直接遞歸與間接遞歸兩種。如果一個算法P顯式地調用自己則稱為直接遞歸。
如果算法P調用另一個算法Q,而算法Q又調用算法P,則稱為間接遞歸調用。
設計遞歸算法要比遞推算法容易的多。但遞歸算法的執行效率比較低。
(5) 減半遞推技術
實際問題的復雜程度往往與問題的規模有着密切的聯系。因此,利用分治法解決這類實際問題是有效的。所謂分治法,就是對問題分而治之。工程上常用的分治法是減半遞推技術。
所謂“減半”,是指將問題的規模減半,而問題的性質不變;所謂“遞推”,是指重復“減半”的過程。
(6) 回溯法
通過對問題的分析,找出一個解決問題的線索,然后沿着這個線索逐步試探,對於每一步的試探,若試探成功,就得到問題的解,若試探失敗,就逐步回退,換別的路線再進行試探。這種方法稱為回溯法。回溯法在處理復雜數據結構方面有着廣泛的應用。