算法 - 杆切割算法

时间:2018-03-14 19:11:23

标签: algorithm greedy

我们给了n米米米,我们希望做以下操作:

  • 切割长度为m1的n1棒
  • 切割长度为m2的n2棒
  • ....

解决这个问题的贪婪方法是什么?

我已经尝试过标准的回溯问题,但这很慢。难道有贪婪的方法来解决这个问题吗?

另外我注意到n1xm1,n2xm2 ......产品的最高公因子应该是n,虽然我对此不太确定,但在我看来还不错。

示例:

n=20
m=40

n1=20 m1=12
n2=40 m2=10
n3=10 m3=6
n4=25 m4=4
<240>(240,400,60,100)的HCF是20.这表示问题可以解决,但我不知道我的贪婪方法的线索。

1 个答案:

答案 0 :(得分:1)

一种贪婪的方法是在每次迭代中切割一根杆,从您可以支撑的最长杆的最大数量开始,在末端填充较短的杆。然后重复剩余的剩余杆的要求。这种情况的第一步是

Rod 1: 3 * 12m + 1 * 4m
recur with [19, 40], [(17, 12), (40, 10), (10, 6), (24, 4)]

对于杆2-6,你将有相同的切口,在杆7上需要12m的需要:

Rod 7: 2 * 12m + 1 * 10m + 1 * 6m

现在,你可能想要一个不同的“贪婪”定义。我建议的两个目前是等同的:

  1. 从最长的切割杆开始(使用最长的)
  2. 从最长的切割杆开始,该切割杆不能均匀地分割杆杆的长度(使用最不明显的合身)。
  3. 对于杆8,你将从10米切口(贪婪-1)或6米切口(贪婪-2)开始。

    另请注意,您可以重复每个单独的杆,只做一次切割,然后重复剩余的长度。

    你能从那里拿走吗?