枚舉法是一種通過列舉所有可能解,然後篩選出符合條件或最優解的解題方法,也教作暴力破解法,適合於解決問題規模較小的情況。
學習影片:https://www.youtube.com/watch?v=YlVJjXgr22Q&t=585s
枚舉法的核心在於暴力搜索,它遍歷所有可能性並檢查每一個解的可行性,儘管計算量較大,但它的簡單性和普遍性使得它成為解決許多問題的一個基本方法,尤其在規模較小的問題中,隨著問題規模增大,必須通過剪枝或動態規劃等技術來優化性能。
貪婪法是一種在求解最優化問題時,透過當前階段選擇局部最優解,希望最終能得到全局最優解的演算法,常見的應用像是背包問題、最小生成樹、哈夫曼編碼等。
學習影片:https://www.youtube.com/watch?v=wUpL4jSmWU0
貪婪法的特點是每次選擇局部最優,而不考慮未來影響,適合解決具備貪婪選擇性質和最優子結構的問題,如活動選擇問題、最小生成樹、哈夫曼編碼等,貪婪法的優點在於簡單、高效,適合問題結構清晰的情況,但其局限在於無法保證全局最優解,因此不適用於所有問題。
回溯法是一種通過不斷嘗試每一條可能的解路徑,遇到無法滿足條件的解時則返回上一步,進行其他選擇的解題方法,它的核心在於試探與回溯,適合用於解決組合問題,如排列、子集、圖中的著色問題等。
學習影片:https://www.youtube.com/watch?v=s7_ekB1hD0g
回溯法適合解決組合性問題,如 N 皇后、迷宮路徑、數獨等。它逐步嘗試所有可能解,遇到無法滿足條件時進行回退。回溯法雖然可以解決多種問題,但在解空間較大時效率不高,因此經常結合剪枝技術優化。
分治法是一種將問題劃分為多個子問題,逐個解決後將結果合併以解決原問題的算法,典型應用如快速排序、合併排序和二分搜索。
學習影片:https://www.youtube.com/watch?v=iDwScuDlsGc
分治法主要應用於分而治之的問題,如快速排序、合併排序、二分搜索等。它將問題劃分為小部分逐個解決,再合併成最終解,分治法適合問題可以自然分解的場景,並且具有較高的效率。
分支界限法是一種用於解決整數規劃、背包問題等組合優化問題的算法,它在枚舉所有可能解的同時,通過界限來減少不必要的搜索,從而優化效率。
分支界限法專門針對組合優化問題,如背包問題和旅行推銷員問題。它利用分支探索所有可能解,並通過設置界限來剪去不可能達到最優解的分支,從而大幅減少計算量,適合處理規模較大的優化問題。