我有以下算法问题:
给定一个客户订单,描述不同长度的多种木材,精度为小数点后 2 位。例如:2 * 1,50;2 * 0,50(需要 4 块木材,2 块长度 1,50 米,两块长度 0,50 米)。
库存的木材数量不限,但固定长度为 2、3、4 和 5 米。 客户订单的木材需要从库存的梁上切割下来。切割本身具有 0 厚度作为理想化。 客户订单中的任何梁长度 > 5,00 米都是不可能的。
目标是最大限度地减少木材的浪费,这是完成客户订单后的结果。当存在多个浪费最少的解决方案时,削减量最少的解决方案是最佳解决方案。
在上面提到的客户订单示例中,一个人将从库存中取出两块 2.00 米的木材,并将它们分别切割成 0.5 米和 1.5 米的一块。因此,该算法将产生浪费 = 0,有 2 次削减。
Example 1:
Customer order: 2 * 1,50 ; 2 * 0,50
Output:
Total waste: 0
Total cuts: 2
2,00 --> 1,50 ; 0,50 waste 0
2,00 --> 1,50 ; 0,50 waste 0
Example 2:
Customer order: 2 * 2,48 ; 1 * 2,68 ; 2 * 3,12 ; 1 * 1,32; 2 * 1,33 ; 1 * 1,34
Output:
Total waste: 1,80
Total cuts: 7
4,00 --> 1,33 ; 1,33 ; 1,34 waste 0
4,00 --> 2,68 ; 1,32 waste 0
4,00 --> 3,12 ; waste 0,88
4,00 --> 3,12 ; waste 0,88
5,00 --> 2,48 ; 2,48 waste 0,04
在客户订单中给定数量的光束下,蛮力方法的性能非常差。
任何人都有一个好的算法方法的想法?关于大复杂度的任何想法?