幾個基本的算法設計方法


1)、遞歸和遞推。遞歸和遞推是學習算法設計的第一步。遞歸算法是把大問題分解成相對較小的問題的過程,而遞推就是從小問題逐步推導出大問題的過程。無論遞歸還是遞推,都應該有初始狀態。

2)、搜索、枚舉及優化剪枝。搜索在所有算法中既是最簡單也是最復雜的算法。說它簡單,是因為算法本身並不復雜,實現容易;說它最復雜,是因為要對搜索的范圍進行一定的控制,不然就會出現超時等問題。搜索技術主要包括廣度優先搜索和深度優先搜索。當其余算法都無法對問題進行求解時,搜索或許是唯一可用的方法。搜索是對問題的解空間進行遍歷的過程。有時問題解空間相當龐大,完全遍歷解空間是不現實的,此時就必須充分發掘問題所包含的約束條件,在搜索過程中應用這些條件進行剪枝,從而減少搜索量。

3)、動態規划(簡稱DP)。動態規划的特點是能夠把很復雜的問題分解成一個個階段來處理的遞推方法,動態規划必須符合兩個特點:無后效性(一個狀態的抉擇不會影響到更大問題的狀態的抉擇)及最優化原理(一個大問題的最優性必須建立在其子問題的最優性之上)。動態規划是競賽中經常出現的的類型,而且變化很大(有線性DP,環形DP,樹形DP等),難易跨度大,技巧性強,甚至還有DP的優化等問題。

4)、貪心。貪心算法是所謂的“只顧眼前利益”的算法。其具體策略是並不從整體最優上加以考慮,而是選取某種意義下的局部最優解。當然使用貪心算法時,要使得到的結果也是整體最優的。

5)、分治、構造等。分治就是把問題分成若干子問題,然后“分而治之”;構造是指按照一定的規則產生解決問題的方法。這兩種算法都是在合理的分析題目后,通過一定的規律性推導,從而解決問題。快速排序可以認為是利用了分治法。

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM