最优组合切割算法

时间:2013-05-21 16:30:51

标签: algorithm optimization language-agnostic

输入:我的主长度为10米,我的产品需要切割成3米,4米,5米尺寸。

我尝试编写一个算法,为我生成下表(最佳长度):

3m 4m 5m Waste
3  0  0  1
2  1  0  0
1  0  1  2
0  1  1  1
0  2  0  2
0  0  2  0

我理解它是如何工作的,但我不知道如何将其转换为代码。

我需要一些伪代码或帮助(我应该使用递归)?

1 个答案:

答案 0 :(得分:3)

这是一次天真的尝试。在已知限制范围内进行彻底搜索。

masterLength = 10

print "3m 4m 5m Waste"

for l3m = 0 to floor(masterLenth/3)
{
    for l4m = 0 to floor(masterLength/4)
    {
        for l5m = 0 to floor(masterLength/5)
        {
            usedLength = l3m*3 + l4m*4 + l5m*5
            waste = masterLength - usedLength
            if (waste<3 and waste>=0)
            {
                print l3m,l4m,l5m,waste
            }
        }
    }
}

[edit]略有改进,减少了搜索空间。

print "3m 4m 5m Waste"

masterLength = 10
remaining = masterLength

for l3m = 0 to floor(remaining/3)
{
    remaining = remaining-l3m*3
    for l4m = 0 to floor(remaining/4)
    {
        remaining = remaining-l4m*4
        for l5m = 0 to floor(remaining/5)
        {
            waste = remaining - l5m*5
            if (waste<3 and waste>=0)
            {
                print l3m,l4m,l5m,waste
            }
        }
    }
}