1. 程式人生 > 其它 >回溯法解最小重量機器問題

回溯法解最小重量機器問題

題目為

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的演算法對每個可能的結果進行一個遍歷,在這個過程中我們可以通過判斷條件來找到我們想要的值,通過剪枝函式來優化時間。