算法(分治、貪心、dp、回溯、分支限界)總結

引言:
爲什麼要學算法? 對於我而言,以後工作中需要讀一段優碼包含一些基本算法的思想。你會更快的知道一段亂代碼你知道爲什麼亂,怎樣去優化。當需要有一些算法設計在程序裏面的時候,對五大經典的算法掌握會讓你更有可能給出一完整的方案。而且熟悉算法不僅可以平穩的應對面試官,還能和別的碼農聊天不被鄙視,認爲你是一個編程大佬。

整體描述:

1、分治算法:(1)基本思想:將一個規模爲N的問題,分解成K個規模較小的子問題這些子問題相互獨立與原問題性質相同,總之,分解子問題的解並得到原問題的角解。(2)特正:①該問題的規模縮小到一定程度就可以容易的解決.②I該問題可以分角爲若於個規模較小的相同問題,即該問題具有最優子結構性質|③利用該問題分解出子問題的角解,可以合爲該問題的解;田該問題所分角解出的各個子問題是相獨立的,即子問題之間不包含公共的子問題。(3)步澩:分用手:將原問題分解爲若於個規模較小相互獨立,與原問題形式相同的子問題,角用決若子問題較小而容易被角解決則直接解則遞歸地角名個子問題合併:將各個子問題的解合併爲原問題的年解(4)應用:二分搜索棋盤覆蓋線性時間選擇合併排序。
2、貪心算法:(1)基本思想從問題的某個初始解出發一步步地進行,根據某個優化測度,每-步都要確保能獲得局部最優解。每二步只考慮一一個數據,他的選取應該-滿足局部優化的條件下0(2 )特徵: 0最大特精徵就是快,通掌常是線性二次式,不需要多少額外的內存。國山選擇:自頂向下進行,以迭比的方式作出相繼的金心選擇每一次的金心選擇就將所求問題簡化爲規模更子問題回最優子結構:魚一次白的好問題都包各最優解。(3)步馬驟: 0建立數學模型來描述問題:日把求解的問題分成若於個分問題日對每一個子問題求角解,得到子問題局部最優角解田把子問題的局部最分來合成原來解問題的一個解(4)應用:揹包問題、馬踏棋盤、均分紙牌
3.動態規劃箅法: (1)基思想:動態規劃的思想是對貪山常法和分治法的種像,通常具有某種最優性灰的問題。在類似問題中能會鎮許多可行解保存以解問題的值 ,之後不管該問題 是否再次用到,只要被計算過值就被保存下來(2)牛特徵:①最優3結構:包含子問題的角解是取優的.日子問題重疊:自頂向下對間是球角解日時,軟生的子問題並不總是新問題有些子問題會被重複計算很多次,保存每一次3問題的解,當需再次計算子問題直接查看其解。(3)步驟:0問題具有最優子結構性失;回構造最優值遞歸關係表達式③最優值算法描述田構造最優爭異(4)應用:最長公共子序列問題、矩陣連乘問題凸多邊形最優=角各階問題、電路佈線問題。
4.回朔算法:(1)基想想:從-條路往前走,能進則進. ,不能進則退回來換~路再試。是個既帶有系統性又帶有跳躍性的搜索算法它在包含問題的所有角解的角解空間樹中按照深度優先的策略,叢根結點出發搜索解空間樹。(2)特徵:①搜索策略:節合遞規算法,問題解決可以必子間題其子問題與原問題相同,只是數據大不同回控制策略爲了避免不要窮舉搜索,對搜索過程失敗點,取從失敗點返回)-點新搜索③數據結構:用數組保存搜索過程的狀態、路徑。(3 )步驟: 0名確定問題的角間空間確完全解形式,以及構造解的剪枝規則。②確定節點的擴展規規,即下個節點的選擇規則,③以深度優先的方式搜索角解間空,如果可以則進入該點的子樹進入下一步搜索;如果不可以,跳過該節點,逐層回滋月(4)應用: n皇右問題揹包問題。
5.分支限界算法:(1)基本思想;首先確定一個合理的分界叫數,並根據限界凼數。確定目標函數的界,按照廣度優先策略搜索問題的解空間樹,依次擴展該結點的孩子結點,分別估算孩子結點目標幽數的可能值如男孩子節點目標兇數超出目標凼數的界,則矯否加入待處理結點。(2)特徵:因爲從最小下界分支,每次算完限胎把搜索樹扯前所有的葉子結點分界進行比較,礎服界最小的結點,此節點即爲下次分支結點。回這種決策的優點是檢查子問題較少,較快求得最佳解。(3)步驟:如果問是的目標爲最化,投定最優解A=∞;根據分枝法則從尚未被洞悉節點中選擇節點並在此點的下一層分爲幾個新的節點;計算每個新分枝出來的節點下限值;對每一點進行洞器條件測試。應用: 01揹包問題、單源最短路徑問題、 最優裝載問題

案例分析:

**1.問題描述:**給定n種物品和二揹包.物品i的重力w,其價值爲Y;揹包容量爲Ic, 應如何選擇裝揹包的物品,使裝入當包中物品的總價值最大。
2.不同算注角用決該問題: ( 1 )動態規劃:迸推方程:.m(i,) )=mcx{m(i-Lj),mci, .j-wi)+vi} js=wi m(il,jl j< wi; 8時間復度爲0(n)(2)貪心法:算法思想; 貪心原則爲單位價值最大且重量最小,不超達過揹包最大承重量爲約束條件。也就是說,存在位重量價值相等的兩個包,則選取重量較小的那個包。但是;貪山算法只有在解決物品以分害的當包問題是正確的。(3)回溯法: '對於有n種可選物品的01揹包問題,其角空間由長度爲的0-1向量組成可用子集數表示。在搜索解空間樹時只要其左兒子結點是個可行結點搜索進入左子樹。當右子樹中有可能包含最優解時就進入右子樹搜索。(4)分支限界法,首先.,要對輸入數據進行預處裏, 將各物品依其單位重量價值從快到小進行排列。在優先隊列分支限界法中節點的優先級由已裝袋的物品價值加上剩下的最大單位重量們值的物品裝滿剩鎔量的價值和
3.對比不同算法求解該問題的優劣: (山)動態規劃:優:求得最優決策序列;缺:速度慢。l2)貪心算法:優:速度較快;缺;很難得到最優角眠,(3)回溯法:優:能得到最優解,缺:時間複雜度較高(14)分支眼界法;優:速度快易求角解;缺:佔用內在大效率不高。
總結:
在計算機行業中,算法分析與設計是一門韭常重的課程.在很問題的解決還是程序的編寫都要依賴它。算法的學習對培養一個人的邏輯思維能力有極大的幫助,可以培養我們思考分析問題、解決問題的能力。總之,這迸期的算法學習讓我收穫很大。

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