我正在一个项目中,我需要以一种优化的格式来创建数据,以免使框架变慢。
问题是:
假设您已从我的电子商务商店订购了产品的 12个单位。对于该产品,我有 5个不同的捆绑包,可以提供如此大量的商品。
假设捆绑商品中以 序列号作为键 和捆绑中可用的 max个单位作为值 的捆绑商品阵列如下:
$arr = array(
array('sr_no1'=>5),
array('sr_no2'=>7),
array('sr_no3'=>2),
array('sr_no4'=>9),
array('sr_no5'=>12)
);
现在,我的贪婪方法有两个主要条件,即放弃客户要求的数量。
最近3天,我一直在努力寻找解决方案。
考虑订购12个或11个或6个数量的测试用例 或35或30,等等。
因此,我需要的是我们将选择分配数量的数组,例如array('sr_no5'=> 12),用于分配12个数量的有序单位和arrays array('sr_no3'=> 2) ,array('sr_no4'=> 9)用于分配11个数量的单位。
在尝试找出解决方案时,我尝试了背包,贪婪和最小生成树。
请找到最优化的解决方案,因为我们不想使服务器超时。
注意:以上所有值,例如订购的数量/单位,否。的 包,每个包中的最大可用单位是变量,可以 更改任何编号。的情况。
答案 0 :(得分:0)
不确定算法,但可以通过为每个束分配一个二进制值0或1来查看所有可能的结果。11000等于5 + 7 + 0 + 0 + 0(12),00010等于0 + 0 + 0 + 9 + 0等
然后基于该伪二进制值和所提供的总数构建一个主数组。
然后按匹配项(或最接近的匹配项)过滤,查看哪个结果的数量最少为1。 这很粗糙,但是可以用。
答案 1 :(得分:-1)
它看起来像3部分算法:
您可以优化代码统一部分 1 和 2 ,在创建阵列时过滤可能的解决方案。可能有许多可能的编程模式,甚至库也可以实现此目的。根据影响每种情况的捆绑包的数量,进行如此多的优化将过于熟练。