Javascript 循环和组合产品的最佳方式
我在寻找你个人对最好的方法的想法,因为我可以看到很多方法达到同样的目的 我有一个店面,有多本不同的小册子,可以任意组合订购 每个小册子项目在数据库中都有长x宽x高和重量。它们都是相同的长x宽,只是厚度和重量不同 我还有一套最大盒子尺寸 我知道我可以在最大的盒子里放10.5的高度 我可以把这些书组合起来装运。所以我想把盒子填到我能填到的最大值,然后重复,直到我只有一个部分盒子 我需要的最终结果是每个盒子及其重量的数组 例如: 订购的物品Javascript 循环和组合产品的最佳方式,javascript,arrays,web,foreach,cgi,Javascript,Arrays,Web,Foreach,Cgi,我在寻找你个人对最好的方法的想法,因为我可以看到很多方法达到同样的目的 我有一个店面,有多本不同的小册子,可以任意组合订购 每个小册子项目在数据库中都有长x宽x高和重量。它们都是相同的长x宽,只是厚度和重量不同 我还有一套最大盒子尺寸 我知道我可以在最大的盒子里放10.5的高度 我可以把这些书组合起来装运。所以我想把盒子填到我能填到的最大值,然后重复,直到我只有一个部分盒子 我需要的最终结果是每个盒子及其重量的数组 例如: 订购的物品 第1册100页,厚度0.05,重量0.15 第二册200页,
if($zip\u code!='')
{
我的$item\u list=enc\u sql\u select\u multi(“从`$PREF{shopping\u carts\u table}`中选择*,其中`'cart\u id`='$cart\u id'和`'salled`='0'以及`从`购物车`='0'中删除');
我的$item_数量='0';
foreach my$k(排序{$a$b}键%$item_列表)
{
$item_数量=~s/,//g;
my$item_id=$$item_list{$k}{id};
my$item_qty_new=$$item_list{$k}{option1value};
$item\u qty\u new=~s/,//g;
$item\u quantity=$item\u quantity+$item\u quantity\u new;
}
如果($item\u qty!=“0”)
{
$item_数量=~s/,//g;
如果($项目数量==25)
{
我的$tempCount=$carton_specs{25}{boxNo};
$tempCount++;
$carton_specs{25}{boxNo}=$tempCount;
}
elsif(项目数量=50)
{
我的$tempCount=$carton_specs{50}{boxNo};
$tempCount++;
$carton_specs{50}{boxNo}=$tempCount;
}
elsif(项目数量=100)
{
我的$tempCount=$carton_specs{100}{boxNo};
$tempCount++;
$carton_specs{100}{boxNo}=$tempCount;
}
elsif($item_数量>100&$item_数量<5000)
{
我的$fullBoxCt=int($item_数量/200);
my$tempCountFull=$carton_specs{200}{boxNo};
$tempCountFull=$tempCountFull+$fullBoxCt;
$carton_specs{200}{boxNo}=$tempCountFull;
my$partBoxQty=$item\u qty-(200*$fullBoxCt);
如果($partBoxQty!=0)
{
my$tempCountPart=$carton_specs{$partBoxQty}{boxNo};
$tempCountPart++;
$carton_specs{$partBoxQty}{boxNo}=$tempCountPart;
}
}
其他的
{
@船舶详情=
(
{
代码=>1000,
价格=>'0.00'
},
{
代码=>1500,
价格=>'0.00'
}
);
退货(@shipDetails);
}
}
这是一个很好的例子。最好的算法是。如果这对于你拥有的数据量来说太慢,那么有各种算法可以更快地提供很好的近似答案。这是装箱问题的一个经典例子,虽然我也不是数学家,但很多人都给出了答案这是一个相当重要的想法。因此:
对于这个问题,没有已知的最佳解决方案可以在多项式时间内计算出来,而且您的输入量可能相当大。因此,您应该采用以下启发式方法之一:
首次拟合算法
:逐个处理小册子,将其放入第一个容量足以容纳小册子的盒子中。如果没有这样的盒子,则必须启动一个新盒子,并将其添加到可用盒子列表中最佳匹配算法
:逐个处理小册子,将其放入最紧(剩余容量最小)的盒子中。如果没有盒子可以容纳小册子,则必须启动新盒子并将其添加到可用盒子列表中第一次拟合递减算法
:首先通过降低高度对小册子进行排序,然后执行第一次拟合算法。在您的示例中,您将首先打包“Book 2”小册子最佳拟合递减算法
:首先通过降低高度对小册子进行排序,然后执行最佳拟合算法