【问题标题】:minimum number of machine for overlapping jobs [closed]重叠作业的最小机器数量[关闭]
【发布时间】:2014-02-22 05:13:40
【问题描述】:

给定需要安排的重叠作业列表。确定所需的最少机器数量。

例如,输入是:{{1,6}, {2, 3}, {4,5}}。

我们可以有两台机器:M1 在 {1, 6} 上工作。和 M2 在 {2, 3} 和 {4, 5} 上工作。

我最初的想法是使用堆栈向量,每个堆栈代表一台机器。但这太占地方了。我的另一个猜测是使用动态编程......

有什么帮助吗?

Java 或 C++。

【问题讨论】:

  • "Java or C++" 表明你什么都没做。请展示一些研究成果
  • 我不明白问题描述。职位编号是什么意思?关于哪些机器可以在什么上工作的规则是什么?为什么 M2 会做两份工作,而 M1 会做一份工作?我也不明白你最初的看法。请给我们一些代码。
  • 听起来像是一道操作系统课作业题。

标签: java c++ dynamic-programming


【解决方案1】:

如果我正确理解了您的问题,则作业由其开始和结束时间 {a,b} 定义。

{{7,8}, {2,11}, {7,8}, {1,7}, {2,3}, {2,7}, {1,9}}

按开始时间对作业进行排序。

{{1,7}, {1,9}, {2,11}, {2,3}, {2,7}, {7,8}, {7,8}}

当一个作业要开始时,可​​能有几台机器空闲。 WLOG,想象一下机器有“等级”,所以所有免费机器中排名最高的就可以了。 (如果多个工作同时开始,排名最高的机器选择哪一个并不重要。)

现在我们可以看到排名最高的机器执行了哪些作业,并将它们从池中移除。重复排名第二的机器,以此类推,直到所有工作都被说出为止。

{{1,7}, {1,9}, {2,11}, {2,3}, {2,7}, {7,8}, {7,8}}
{{1,9}、{2,11}、{2,3}、{2,7}、{7,8}}
{{2,11}, {2,3}, {2,7}, {7,8}}
{{2,3}, {2,7}, {7,8}}
{{2,7}}

在这种情况下需要 5 台机器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 2021-12-31
    • 2015-05-01
    • 2016-08-01
    • 1970-01-01
    • 2019-09-30
    • 2011-01-15
    相关资源
    最近更新 更多