簡體   English   中英

帶有多個袋子和僅重量的物品的背包

[英]Knapsack with multiple bags and items having only weight

我正在嘗試解決此問題,我想知道是否存在已知的算法/解決方案來解決此問題。

問題:

我有n個袋子和n個物品(相等或不同的重量)可裝入這些袋子。 這些袋子中的每個袋子都有一定的重量限制,因此需要將n個物品放入這些袋子中,這樣我才能在每個袋子中使用最大的空間。

袋子大小相等。 也將想知道如何解決尺寸不等的袋子。

我讀過的大多數解決方案都在嘗試解決具有重量和價值的0/1背包。 我應該認為重量和價值相同嗎? 我在正確的軌道上嗎?

這不是作業問題。

這被稱為垃圾箱包裝問題 (NP難題)。

通過簡單地按其大小對降序進行排序,然后將每個項目插入具有足夠剩余空間的列表中的第一個箱中,我們得到11/9 OPT + 6/9箱(其中OPT是最優中使用的箱數解)。 通過有效的實現,這很容易獲得O(n²)O(n log n)

就最佳解決方案而言,沒有一個背包問題眾所周知的動態編程解決方案。 該資源有一個選項-基本思想是:

 D[{set}] = the minimum number of bags using each of the items in {set} Then: D[{set1}] = the minimum of all D[{set1} - {set2}] where set2 fits into 1 bag and is a subset of set1 

上面的數組索引實際上是一個集合-可以將其視為集合到值的映射,位圖或多維數組,其中每個索引為1或0以指示我們是否包括與該維度相對應的項。

鏈接的資源實際上考慮了多種類型,這些類型可以多次出現-我從中得出了上述解決方案。

運行時間將在很大程度上取決於可放入袋子的物品數-它將是O(minimumBagsUsed.2 maxItemsPerBag )

在1袋的情況下,這本質上是子集和問題 為此,您可以將重量與值視為相同,並使用背包算法求解,但是對於多個袋子來說,這實際上效果不佳。

為什么不? 考慮袋大小為16物品5,5,5,9,9,9 如果僅求解子集總和,則每個袋子剩下5,5,5 ,每個袋子剩下9個(總共4袋子),而不是3個袋子中的每個5,9

子集總和/背包的問題已經很棘手-如果使用它不能為您提供最佳解決方案,那么您也可以使用上面的排序/貪婪方法。

暫無
暫無

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

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