【算法複習一】常見的算法策略彙總

原文鏈接http://blog.csdn.net/tianshuai11/article/details/7530176

 

一,概述

算法策略和算法是有區別的,它們是算法設計中的兩個方面,算法策略是面向問題的,算法是面向實現的;

但二者又是不可分的,首先是通過算法策略才找出解決問題的算法,其次對於用不同算法求解的問題算法策略是自然不同的。


二,算法策略

1)遞推策略:“遞推法”和貪心算法一樣也是由當前問題的逐步解決從而得到整個問題的解,只是依賴的是信息間本身的遞推關係,每一步不需要策略參與到算法中,它們更多地用於計算。

2)遞歸策略:遞歸法是利用大問題與其子問題間的遞歸關係來解決問題的。每次找出大問題與小的子問題之間的關係,直到小的子問題很容易解決,再由小的子問題的解導出大問題的解。。例如:漢諾塔問題

3)窮舉策略:對所有可能的解逐一嘗試。

4)遞歸回溯策略:類似於窮舉法的思想,遞歸回朔法通過遞歸嘗試遍問題各個可能解的通路,發現此路不通時回朔到上一步繼續嘗試別的通路。

5)分治策略:求解的則是較複雜的問題,這類問題是可以被分解成獨立的子問題來解決的,將兩個或兩個以上的獨立子問題的解“合成”,就得到較大的子問題的解,最後合成爲總問題的解。(注意一定是可以分解成獨立子問題,否則會重複計算公共子問題)

6)動態規劃策略動態規劃法與貪心法類似,要求問題具有最優子結構(即最優解包含子問題的最優解),是一種自底向上的求解思路,與遞歸正好相反,每次求解到一個階段時,該階段求解所依賴的子問題已經完全求解完畢,因此每一步的求解都是在直到全部所需信息的情況下進行的,因此可以得到全局最優解。

7貪心策略:如果想要得到最優解,需要對問題性質有更嚴格的要求,除了要有最優子結構外,還要求問題具有貪婪選擇性質。具體來說就是:貪心是一種策略,即每一步都要選擇當前看來最好的,做完此選擇後便將問題化爲一個(僅僅一個)子問題,這是一個順序的求解過程,每一步都是單獨考慮,只考慮局部最優,因爲並沒有完成對之後子問題的求解,所以貪心算法不能完成對整個解空間的搜索,因此通常不能得到最優解。除非問題具有貪婪選擇性質。所謂貪婪選擇性質就是問題經過一次貪婪選擇後只能形成一個子問題,這樣求解空間實際上就是一個線性的空間,貪心算法可以得到最優解。是一種自頂向下求解思路。


三,算法策略之間關係

1)分治法”與“動態規劃法”

• 都是遞歸思想的應用,找出大問題與小的子問題之間的關係,直到小的子問題很容易解決,再由小的子問題的解導出大問題的解。

•分治法的特徵之一是所分解出的各個子問題是相互獨立的,即子問題之間不包含公共的子問題。

• 動態規劃的實質是分治思想和解決冗餘。

2)全面逐一嘗試、比較“窮舉法”、“枚舉法”、“遞歸回溯法”

• 若問題中不易找到信息間的相互關係,也不能分解爲獨立的子問題,似乎只有把各種可能情況都考慮到,並把全部解都列出來之後,才能判定和得到最優解。

枚舉法算法的實現依賴於循環,通過循環嵌套枚舉問題中各種可能的情況。

• 對於規模不固定的問題就無法用固定重數的循環嵌套來枚舉了,有的問題可能通過變換枚舉對象也能用循環嵌套枚舉實現,但更多的任意指定規模的問題是靠遞歸回朔法來“枚舉”或“遍歷”各種可能的情況。

3)回溯與分支限界策略

•回溯法以深度優先的方式搜索解空間樹,而分支限界法則以廣度優先或以最小耗費優先的方式搜索解空間樹。

•一般情況下,回溯法的求解目標是找出解空間樹中滿足約束條件的所有解的方案,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使某一目標函數值達到極大或極小的解,即在某種意義下的最優解。

4)深度優先與廣度優先

• 深度優先:通常深度優先搜索法不全部保留結點,擴展完的結點從數據存儲結構棧中彈出刪去,一般在數據棧中存儲的結點數就是解空間樹的深度,因此它佔用空間較少。所以,當搜索樹的結點較多,用其它方法易產生內存溢出時,深度優先搜索是一種有效的求解方法。

• 廣度優先:一般需存儲產生的所有結點,佔用的存儲空間要比深度優先搜索大得多,因此,程序設計中,必須考慮溢出和節省內存空間的問題。但廣度優先搜索法一般無回溯操作,即入棧和出棧的操作,所以運行速度比深度優先搜索要

5)動態規劃與搜索算法

搜索算法:在解決最優化問題的算法中,搜索可以說是“萬能”的。所以動態規劃可以解決的問題,搜索也一定可以解決。動態規劃要求階段決策具有無後向性,而搜索算法沒有此限止。

•動態規劃算法在時間效率上的優勢是搜索無法比擬的,但動態規劃總要遍歷所有的狀態,而搜索可以排除一些無效狀態。可能剪去大量不必要的狀態,因此在空間開銷上往往比動態規劃要低很多。

動態規劃是自底向上的遞推求解,而無論深度優先搜索或廣度優先搜索都是自頂向下求解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章