Algorithm 贪婪顺序/并行任务调度

Algorithm 贪婪顺序/并行任务调度,algorithm,math,optimization,scheduling,greedy,Algorithm,Math,Optimization,Scheduling,Greedy,我们有N任务需要安排处理。每个任务由两部分组成,需要按顺序执行。第一个任务由互斥锁保护,因此一次只能执行一个任务。第二部分并没有这样的约束,任何数量的任务都可以同时执行。对于任务i,我们知道它需要在每个部分花费多少时间,即受保护部分的mi和可以并行执行的部分的ai 问题是找到任务的排列方式,以便将执行所有任务所需的时间减至最少 我的直觉告诉我,这可以通过贪婪算法来解决,按照人工智能的降序来安排任务 例如,给定的任务有: m1=3,a1=9 m2=2,a2=7 m3=6,a3=10 最佳解决方案是

我们有
N
任务需要安排处理。每个任务由两部分组成,需要按顺序执行。第一个任务由互斥锁保护,因此一次只能执行一个任务。第二部分并没有这样的约束,任何数量的任务都可以同时执行。对于任务
i
,我们知道它需要在每个部分花费多少时间,即受保护部分的mi和可以并行执行的部分的ai

问题是找到任务的排列方式,以便将执行所有任务所需的时间减至最少

我的直觉告诉我,这可以通过贪婪算法来解决,按照人工智能的降序来安排任务

例如,给定的任务有:
m1=3,a1=9
m2=2,a2=7
m3=6,a3=10

最佳解决方案是排列3、1、2,其中任务重叠如下(加号为第1部分花费的时间,减号为第2部分花费的时间):

任何其他排列都会产生更高的所需总时间,例如:

1 +++--------- (3,9)
2    ++------- (2,7)
3      ++++++---------- (6, 10)
Total time needed: 3+2+6+10: 21

然而,我很难证明贪婪的解决方案是最优的。关于如何做到这一点有什么想法吗?

要解决这个问题,让我们先写一个方程式来计算N个任务所需的总时间

这个方程式是: t=m1+a1+max((a2+m2-a1),(a3+m3-a2),…)

这个等式的第一部分(m1+m2+…)是第一个任务所需的时间

方程的第二部分更为复杂。简单地说,max()计算与第一个任务不重叠的最大任务时间(在您的示例中,此最大时间为9)

现在让我们通过归纳来证明最优解。假设n个任务的最佳答案是按ai降序排序。然后,如果我们引入另一个an+1和mn+1,并且an+1是ai的最小值(我们可以通过归纳假设来假设),那么an+1应该位于列表的底部

为了证明这一点,假设+1去了任何其他位置,比如i。然后ai+1+mi+1-an的值将明显大于之前的值(甚至大于an+mn-ai-1)。因此,max()函数将返回一个大于或等于其上一个值的值

现在我们必须证明n=2的归纳假设。假设我们有a1和a2

方程t=m1+a1+a2+m2-a1的值现在很有趣,它简化为t=m1+a2+m2


很容易看出a2必须是这个等式的较小值才能最小化。因此,归纳假设已经被证明。

为了解决这个问题,让我们先写一个方程式来计算N个任务所需的总时间

这个方程式是: t=m1+a1+max((a2+m2-a1),(a3+m3-a2),…)

这个等式的第一部分(m1+m2+…)是第一个任务所需的时间

方程的第二部分更为复杂。简单地说,max()计算与第一个任务不重叠的最大任务时间(在您的示例中,此最大时间为9)

现在让我们通过归纳来证明最优解。假设n个任务的最佳答案是按ai降序排序。然后,如果我们引入另一个an+1和mn+1,并且an+1是ai的最小值(我们可以通过归纳假设来假设),那么an+1应该位于列表的底部

为了证明这一点,假设+1去了任何其他位置,比如i。然后ai+1+mi+1-an的值将明显大于之前的值(甚至大于an+mn-ai-1)。因此,max()函数将返回一个大于或等于其上一个值的值

现在我们必须证明n=2的归纳假设。假设我们有a1和a2

方程t=m1+a1+a2+m2-a1的值现在很有趣,它简化为t=m1+a2+m2


很容易看出a2必须是这个等式的较小值才能最小化。因此,归纳假设已经被证明。

我对这个问题得到了一个非常聪明的答案,在as上用矛盾证明。

我对这个问题得到了一个非常聪明的答案,在as上用矛盾证明。

你能澄清一下最佳排列是3,1,2?我编辑了主要问题以澄清。感谢澄清。我在下面贴了一张证明。我试图尽可能详细地回答。请询问您是否有任何问题或我是否犯了逻辑错误。您能否澄清最佳排列方式是3、1、2?我编辑了主要问题以澄清。感谢您的澄清。我在下面贴了一张证明。我试图尽可能详细地回答。请询问您是否有任何问题或我是否犯了逻辑错误。谢谢您的回答。然而,我认为t的方程是不正确的。在只有两个任务的情况下,它会给我们:t=m1+a2+m2。假设一个a1=2,m1=5,a2=1,m2=1的例子,它会给我们t=3,而正确的t是7。我遗漏了什么吗?m1+m2+a2=5+1+1=7谢谢你的回答。然而,我认为t的方程是不正确的。在只有两个任务的情况下,它会给我们:t=m1+a2+m2。假设一个a1=2,m1=5,a2=1,m2=1的例子,它会给我们t=3,而正确的t是7。我遗漏了什么吗?m1+m2+a2=5+1+1=7
1 +++--------- (3,9)
2    ++------- (2,7)
3      ++++++---------- (6, 10)
Total time needed: 3+2+6+10: 21