如何将这些产品拆分成包?

时间:2015-08-14 09:12:29

标签: algorithm

我有这组产品:

Product     Quantity    Weight Per Unit
pro#1          7               5kg
pro#2          5               5kg

我想将这些产品拆分成包装,但包装的最大重量为22kg。

假设我在数组中有该表,我想要一个算法来解决这个问题。

这是我到目前为止所尝试的。

$products = array(
    array('weight'=> 5, 'quantity' => 7),
    array('weight'=> 5, 'quantity' => 5),
);
$max_weight = 22;
$packs = array();
$packs_count = 1;
foreach ($products as $product){
   while ($product['quantity'] != 0) {
        $pack[$packs_count]['weight'] = $pack[$packs_count]['weight'] +$product['weight'];
        if($pack[$packs_count]['weight'] >$max_weight){
            $pack[$packs_count]['weight'] = $pack[$packs_count]['weight'] - $product['weight'];
            $packs_count++;
         }
         $product['quantity']--;
 }
}

代码无法正确获取最后一个包。

2 个答案:

答案 0 :(得分:1)

我在PHP中使用此代码解决了问题,任何其他想法都会很棒。不管怎样,谢谢。

 $products = array(
    array('weight'=> 4, 'quantity' => 5),
    array('weight'=> 8, 'quantity' => 3),
);
$max_weight = 22;
$packs = array();
$packs_count = 1;

foreach ($products as $product){
   while ($product['quantity'] != 0) {
       $pack[$packs_count]['weight'] = $pack[$packs_count]['weight'] +$product['weight'];
        if($pack[$packs_count]['weight'] > $max_weight){
            $pack[$packs_count]['weight'] = $pack[$packs_count]['weight'] - $product['weight'];
            $packs_count++;
            $pack[$packs_count]['weight'] = $product['weight'];

        }
        $product['quantity']--;
   }
}

 print_r($pack);

答案 1 :(得分:0)

我想要实现的目标并不完全清楚。我假设您正在尝试最小化算法创建的包的总数。如果确实如此,那么您要解决的问题是Bin Packing Problem。这个算法是NP难的,但是有一些简单的启发式方法(可能)比你提出的方法更好。例如,第一个适合减少算法将包括将项目从最大到最小排序并将它们插入它们适合的第一个箱子中(如果现有的箱子没有足够的剩余容量,则创建一个新箱子)< / p>