我有分配问题的任务。我们有一台超级计算机和n
台计算机,我想在它们上执行n
个任务。超级计算机可以在任何时间仅计算一个任务,超级计算机具有单独的计算机。计算机在通过超级计算机后获得任务。
我必须编写计算最佳执行时间的算法。
这是一个输入:
5
9 6
6 2
2 6
10 1
5 6
第一行是任务数,在下一行中,第一个数字是在超级计算机上执行任务所花费的时间,第二个是用于计算机的任务。
我在指定矩阵的外观方面存在问题。我知道对于同样的计算机它是如何做的,但在这里我也必须考虑到超级计算机。
任何人都可以为此任务绘制矩阵吗?
在测试服务器上答案是33,我尝试了2种方法,但我有32和34。
| T1 | T2 | T3 | T4 | T5 |minimal
________________________________
S | 9 | 6 | 2 | 10 | 5 |2
_________________________________
C | 6 | 2 | 6 | 1 | 6 |1
现在,我寻找(S)超级计算机和(C)omputer的最小时间,是2和1并从任何行中减去。
| T1 | T2 | T3 | T4 | T5 |
_________________________
S | 7 | 4 | 0 | 8 | 3 |
____________________________
C | 5 | 1 | 5 | 0 | 5 |
__________________________________
minimal| 5 | 1 | 0 | 0 | 3
接下来,我寻找任何任务的最小时间并减去。结果是从第一次减去2 + 1,从第二次减去5 + 1 + 3,从中得到2 + 3 + 5 + 8 + 2:
| T1 | T2 | T3 | T4 | T5 |
_________________________
S | 2 | 3 | 0 | 8 | 0 |
____________________________
C | 0 | 0 | 5 | 0 | 2 |
但我不知道它是否有意义。
答案 0 :(得分:0)
这不是分配问题。它更多的是调度问题。你得到的答案是因为以下逻辑:
由于所有任务只能使用一台超级计算机,因此您希望它尽可能免费。
因此,您可以按照执行时间的升序在超级计算机上安排作业。
2 -> 5 -> 6 -> 9 -> 10
在超级计算机上完成各自的工作后,他们有足够的时间在各自的计算机上执行剩余的工作。但是在这个系列之后,只剩下最后一个任务在其计算机上工作(1个单位时间)。
Hence total time consumed = 2 + 5 + 6 + 9 + 10 + 1 = 33
如何解决此类问题:
我之前说的一个逻辑是让超级计算机尽可能免费。然而,这种逻辑打破了以下情况:
5
9 6
6 2
2 6
10 **100**
5 6
现在如您所见,第4项任务在其个人计算机上占用100个单位时间。因此,最好按优先级进行安排,以便执行的总时间为110而不是更多。
蛮力组合应具有因子复杂性,因为有N!可能的时间表排列。
然而,互联网上有大量关于Job-shop日程安排的文献。您可以谷歌搜索并找到与您相关的内容。