如何绘制任务矩阵?

时间:2014-06-08 16:51:14

标签: algorithm hungarian-algorithm

我有分配问题的任务。我们有一台超级计算机和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  |

但我不知道它是否有意义。

1 个答案:

答案 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日程安排的文献。您可以谷歌搜索并找到与您相关的内容。