回溯法解最小重量機器問題
阿新 • • 發佈:2021-12-14
題目為
7-2 最小重量機器設計問題 (25 分)設某一機器由n個部件組成,每一種部件都可以從m個不同的供應商處購得。設wij是從供應商j 處購得的部件i的重量,cij是相應的價格。 試設計一個演算法,給出總價格不超過d的最小重量機器設計。
回溯法分析:
設計一個函式,返回點為當n個部件都買完了且買的錢不超過d,這個時候如果總機器的總量比之前存的最輕的機器重量小的話,就把該值存入。否則的話,進入選擇去這個廠商還是去另一個廠商買這幾個選擇,如果錢夠
買這個零件的話就先買,然後繼續到下一個零件,也有選擇去哪個廠商買的步驟,買了這個零件後繼續重複上述操作,直到錢沒了或者東西買完了,然後回溯回去,回溯的同時要加上買該零件花的錢,(因為如果回溯的話就說明該零件不選)。最後遍歷完所有可能的結果,然後輸出最優解
解空間
{1,3,1}、{1,3,2}、{1,3,3} , {1,3,1} 代表第一個零件從第一個廠商買,第二個零件從第三個廠商買,第三個零件從第一個廠商買
解空間樹
如果從買零件的角度上看其實就是一個樹,樹的分支分別代表取不同的廠商買零件,樹的深度代表第幾個零件
在遍歷樹的過程中每個節點值有剩餘的錢 和 已經買的零件的重量
回溯法就是用DFS的演算法對每個可能的結果進行一個遍歷,在這個過程中我們可以通過判斷條件來找到我們想要的值,通過剪枝函式來優化時間。