回溯演算法的要點:
1,針對所給問題,定義問題的解空間。
2,確定容易搜尋的解空間的組織結構。
3,通過剪枝優化搜尋過程。
下面通過求解0/1揹包問題來分析使用回溯演算法的過程:
1,根據問題的描述,設所有的物件數是n,對應的重量和價值分別為w[0~n-1]和v[0~n-1],於是這個問題就轉化成在這n件物件中選擇乙個子集,使其總價值最大,並且滿足總重量不超過包的容量cw。因此此問題的解空間是2^n。
2,對於從n個元素的集合s中求滿足某種性質的子集時,相應的子空間成為子集樹,這類子集樹通常是滿完全二叉樹,通過遍歷這棵樹的每個葉子節點來達到遍歷整個解空間的目的,相應的時間複雜度為o(2^n)。
3,對於揹包問題的剪枝函式,可以從以下兩方面考慮:
(1)根據題目要求,選擇物件的總重量不能超過包的容積,這可以作為乙個剪枝條件。用constraint(t)函式表示在遍歷子集樹第t層某個節點時,此約束函式是否滿足,如不滿足,則剪去相應的子樹。
(2)第二種剪枝函式稱為邊界函式bound(t),當它返回true時,表示當前遍歷節點未取得最優值,需要進一步搜尋子樹。
回溯 01揹包問題
這裡再簡單寫一下問題要求 給定n中物品和乙個容量為c的揹包,物品i的重量為wi,其價值為vi,0 1揹包問題是如何選擇裝入揹包的物品 物品不可分割 使得裝入揹包的物品的價值為最大。1.題目分析 考慮到每種物品只有2 種選擇,即裝入揹包或不裝入揹包,並且物品數和揹包容量已給定,要計算裝入揹包物品的最大...
0 1揹包問題(回溯)
描述 需對容量為c 的揹包進行裝載。從n 個物品中選取裝入揹包的物品,每件物品i 的重量為wi 價值為pi 對於可行的揹包裝載,揹包中物品的總重量不能超過揹包的容量,最佳裝載是指所裝入的物品價值最高。輸入多個測例,每個測例的輸入佔三行。第一行兩個整數 n n 10 和c,第二行n個整數分別是w1到w...
01揹包問題(回溯)
回溯法求解0 1揹包問題 問題描述 略 解題分析 確定約束函式和限界函式 約束函式 cw i w i total weight 重量 限界函式 b i cv i r i 價值 解空間組織 樹或圖 樹結構 子集樹 排列樹 搜尋方式 深度優先演算法的核心 回溯函式 限界函式,其中約束函式沒有單獨寫出來,...