最小化完工时间:m台机器并行完成n个工作(到达时间不同)

时间:2017-09-12 07:18:31

标签: algorithm greedy

  • 设n为工作数.1< n< 1000。
  • 工作是独立的。
  • 每个工作都到了:Ai(工作可以同时到达)
  • 我们有可以并行运行的机器:1< = m< = 30。
  • 每台机器都能及时完成工作。 1< = tj< = 20。

目标是尽量减少完工时间:所有工作完成所需的时间。

这是练习的一部分,需要使用1GHz cpu在1s内解决。即:需要O(n ^ 2)/ O(n ^ 2lgn)算法。因此不能使用蛮力。

我的第一个方法是:

 for each job,sorted by arrival time, select the machine that finishes first. 

aka:其中max(ai,machine.ready)+ Tj是最小的。

问题是到达0,1的工作和3,4次的机器,例如,程序:选择3为0和4为1,所以它完成为5,而如果它选择4为0和3为1 ,它将在4完成。

+++

- ++++

VS

++++

- +++

a second approach is to do the same but from the back starting from the last arriving job.

但是就业:0,2和机器3,7:

  • 作业2使用机器3,其保留从t = 0到t = 5。
  • 然后作业0必须使机器7达到7结束时间

虽然我们可以看到,如果我们只使用机器3从0到3然后从3到6,那就更好了。

- +++

+++++++

VS

++++++

我正在从一个没有显示更正的网站上学习,直到问题解决了(你通过了所有测试用例(输入被隐藏))所以问题保证有解决方案但是我不知道如何。

0 个答案:

没有答案