五大常用算法概述
1、遞歸和分治;
2、動態規劃(DP);
3、貪心算法;
4、回溯法;
5、分支限界法;
6、概率算法;
7、線性規劃;
8、NP完全性理論。
我們平常所見的一般都是前5種,這里簡單介紹。
?分治法:把一個大規模問題劃分成幾個子問題,對每一個子問題采用同樣的處理方法,求出各子問題的解答,再把這些子問題的解答組合成整個問題的解答。子問題相互獨立。
動態規劃:當整個問題的解答無法由少數幾個子問題的解答組合得出,而依賴于大量子問題的解答,并且子問題的解答又需要反復利用多次時,系統地列表記錄各個子問題的解答,據此求出整個問題的解答。記錄在表、子問題不相互獨立、最優子結構、重疊子問題。
貪心算法:在算法的每一步驟,都采取當前看來可行的或最優的策略。這是一種最直接的方法,只有在一些特殊情況下,貪婪法才能求出問題的解答。對于錄求最優解的問題、貪婪法通常只能求出近似解。
回溯法:為了尋求問題的解答,有時需要在所有的可能性(稱為候選對象)中進行系統的搜索,例如在尋求最優解的問題中,就常碰到這種情況。這時,須把各種候選對象組織成一棵樹,每個樹葉對應著一個候選對象,于是每個內部頂點就表示若干個候選對象(即在此頂點下面的樹葉)。回溯法是從樹根開始按深度優先搜索的原則向下搜索,即沿著一個方向盡量向下搜索,直到發現此方向上不可能存在解答時,就退到上一個頂點,沿另一個方向進行同樣的工作。回溯法一般用來求解所有滿足約束條件的解。通常為了加速,和分支截斷法配合使用。分叉截斷法也是從樹根開始向下搜索,不同的是,分叉截斷法常常利用一個適當選取的評估函數,來決定應該從哪一點開始下一步搜索(分叉),以及哪一點下方不可能存在解答,從而這點的下方不必進行搜索(截斷)。評估函數選得好,就會很快地找到解答,選得不好,就可能找不到解答或者找到的不是最優解(有時它可以作為最優解的一個近似解)。
分支限界法:分支限界法常以廣度優先或以最小耗費(最大效益)優先的方式搜索問題的解空間樹。在分支限界法中,每一個活結點只有一次機會成為擴展結點。活結點一旦成為擴展結點,就一次性產生其所有兒子結點。在這些兒子結點中,導致不可行解或導致非最優解的兒子結點被舍棄,其余兒子結點被加入活結點表中。此后,從活結點表中取下一結點成為當前擴展結點,并重復上述結點擴展過程。這個過程一直持續到找到所需的解或活結點表為空時為止。求解目標是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使某一目標函數值達到極大或極小的解,即在某種意義下的最優解。
總結
- 上一篇: Xshell6下载安装
- 下一篇: c++远征之多态篇——异常处理