[英]NP-Completeness in Task Scheduling
因此,这是一个引人深思的问题,可以让我的教授了解NP-Completeness的概念。 我知道为什么应该有一个解决方案,由于NP-Completeness的规则,但我不知道如何找到它。 所以这是问题所在:
问题是两个处理器的简单任务调度问题。 每个处理器可以处理n
任务中的一个,并且任何两个任务可以同时完成。 每个任务都有一个结束时间e
,必须在此时完成。 每个任务也有一个持续时间d
。 所有时间值,例如结束时间,持续时间和系统中的当前时间(时间将从0开始)都是整数。 因此我们给出了n
任务的列表,我们需要使用这两个处理器来安排它们。 如果无法安排任何一个,则算法必须不返回任何解决方案。 请记住,顺序无关紧要,只要没有重叠并且每个任务在截止日期之前完成,哪个处理器获取哪个任务都无关紧要。
所以这里是问题得到概念/抽象的地方,比如说我们可以访问一个特殊的小函数,我们不知道它是如何工作的,我们所知道的就是:给定n
任务列表和当前调度,它将返回true
或者基于该算法是否可以从这一点解决而false
。 此函数假定已安排的任务是一成不变的,它只会更改未安排的任务的时间。 但是,所有这个函数都返回true或false,如果找到解决方案,它将不会给你正确的时间表。 关键是你可以在执行调度问题时使用特殊功能。 目标是解决调度问题,并使用对特殊函数的多项式调用次数,返回正确调度的每个作业的工作时间表。
编辑:澄清一下,问题是:创建一个解决方案来安排所有n
任务,没有任何超过截止日期,使用多项式数量的调用“特殊功能”。
我认为这个问题是为了证明验证解是多项式,但发现它是非多项式的。 但是我的教授坚持认为有一种方法可以使用对特殊函数的多项式调用来解决这个问题。 由于整个问题是NP-Complete,这将证明运算符的非多项式方面在算法的“决策部分”中出现。
如果你希望我清理任何东西只是发表评论,我知道这不是对这个问题的完美解释。
给定oracle M
仅返回true
或false
:
input:tasks - 任务列表输出:schedule:每个任务算法的三元组(任务,处理器,启动):
While there is some unscheduled task:
let p be the processor that currently finished up his scheduled tasks first
let x be the first available time on x
for each unscheduled task t:
assign t with the triplet: (t,p,x)
run M on current tasks
if M answers true:
break the for loop, continue to next iteration of while loop
else:
unassign t, and continue to next iteration of for loop
if no triplet was assigned, return NO_SOLUTION
return all assigned triplets
M
O(N^2)
调用。 k
之后,如果在它之前有解,则在它之后仍然存在解(并且在分配一些任务之后)。 在证明这种说法之后,对于k=#tasks
可以简单地实现算法的正确性 正式证明上述声明:
假设有一些解{ (tj,pj,xj) | j=1,...,n}
{ (tj,pj,xj) | j=1,...,n}
,由j<u <-> xj<xu
排序,并且还假设t1,t2,...,ti-1被指定与所产生的算法(归纳假设)相同。 现在,我们将分配ti
,我们将能够做到这一点,因为我们将找到最小的可用时间戳( xi
),并在其上放置一些任务。 我们将找到一些任务,因为ti
是可能的 - 它不会“失败”并产生“NO_SOLUTION”。
此外,由于算法在迭代i
中不产生“NO_SOLUTION”,从M
正确性,它将产生一些任务t
,通过分配(t,p,x)
- 仍然会有一个解决方案,并且声明步骤i
被证明了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.