装配线调度问题陈述这是一个可以用动态规划方法解决的流行问题。流水线是工业用较少的人力和更快的速度来生产产品的机械。在流水线上,原料被放到生产线上,经过几个步骤,对原料进行一些操作。 在这个问题中,我们有两条装配线,每条线都有N电台。N站有他们的功能,如绘画,形状制作等。这两条线除了所用的时间外,就功而言是相同的。 由于进入时间分别需要进入流水线1和流水线2,因此有e1和e2。 也有x1和x2作为各自线路的退出时间。 如果我们在任何一站,我们会加上该站的时间,然后我们会移动到下一站。下一站我们有两种选择,要么我们去同一线路的下一站,要么我们去另一条线路的下一站。如果我们选择去另一条生产线的下一站,我们将不得不增加从装配线转移的过渡时间。 最后,我们必须计算出从装配线退出产品所需的最短时间。 例如: ![]() 我们有两条装配线,假设我们决定选择突出显示的路径。所需时间为: 8+12+5+4+3+2+10+12+8+9+2 = 75个单位。 我们必须选择一条时间最短的路。 Method1我们将用递归方法来解决这个问题。因为在每一站,我们都有两种可能,要么去同一线路的下一站,要么去另一条线路的下一站。 Java代码: 输出: ![]() 解释 在上面的代码中,我们有两个2d数组。一个数组表示两条线路上每个站的时间,另一个2d数组表示过渡时间。 我们可以从1号线或2号线开始。我们有两个选择,所以我们取两个选项的最小值并开始递归调用。 在每个站点,我们进行两次递归调用,并返回两个结果的最小值。对于基本情况,如果我们在最后一站,我们将把该站的时间和该线的出口时间相加,并返回该值。 因为在每一个连续的步骤中,我们有两个递归选择 时间复杂度:O(2n),其中n为车站数。 空间复杂度:O(n)用于递归。 Method2由于存在重叠的递归调用,我们将使用动态编程方法来解决这个问题。我们将使用制表的方法来解决这个问题,我们将从下到上在表格中得到结果。 Java代码: 输出: ![]() 时间复杂度: O (nx2) 空间复杂度: O (nx2) 我们可以将时间复杂度降低到常数,因为在表中,我们只需要下一个迭代的两个条目,这已经解决了。 Method3Java代码: 输出: ![]() 解释 在上面的代码中,我们只使用了四个变量而不是一个数组,它与站点的数量无关,所以它是在常数时间内。 时间复杂度(nx2) 空间复杂度: O (1)
下一个话题
图的广度优先搜索或BFS
|