簡體   English   中英

了解子集總和以解決資源分配

[英]understanding the subset sum to solve resource allocation

我在互聯網上找到了此代碼,我很難理解它。 誰能提供一些解釋將非常有幫助。

  SubsetSum(n, W):
Initialize M[0,w] = 0 for each w = 0,...,W
Initialize M[i,0] = 0 for each i = 1,...,n
For i = 1,...,n: for every row
For w = 0,...,W: for every column
If w[i] > w: case where item can’t fit
  M[i,w] = M[i-1,w]

M[i,w] = max( which is best?
M[i-1,w],
w[j] + M[i-1, W-w[j]]
)
Return M[n,W]

分類

這是動態編程的典型應用。

變量

w[i]表示項目i的權重, W表示全局容量, M[i,w]表示使用第一個i對象和剩余容量w子集和問題的最優解。

重點觀察

為了從先前的值M[i-1,*]獲得最優解M[i,w] ,我們可以包括下一項i或將其省略。 如果我們包含項目i ,則M[i,w] = w[i] + M[i-1, ww[i]] (為包含項目i添加權重w[i] ,但減少了剩余容量數量相同;涉及j的幻燈片上有錯字。 如果我們將項目i排除在外,則M[i,w] = M[i-1,w] (不將任何值添加到先前的解決方案中,並保持相同的剩余容量)。

我們對最佳(最大)解感興趣,因此我們采用了這兩個值中的最大值。 無論如何,我們都減小了M[i,*]的索引。 這意味着,如果我們知道值M[i',*] ,則可以為i > i'計算值M[i,*] 這正是動態編程的思想。

注意

第一行是初始化,並且在值w[i]大於剩余容量w ,我們顯然不能包括第i項目。 返回值M[n,W]描述了從全局容量開始包括所有項的最佳解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM