因此,这是一个引人深思的问题,可以让我的教授了解NP-Completeness的概念。我知道为什么应该有一个解决方案,由于NP-Completeness的规则,但我不知道如何找到它。所以这就是问题所在:
问题是两个处理器的简单任务调度问题。每个处理器可以处理n
任务之一,任何两个任务都可以同时完成。每个任务都有一个结束时间e
,必须在此时完成。每项任务的持续时间为d
。所有时间值,例如结束时间,持续时间和系统中的当前时间(时间将从0开始)都是整数。因此,我们获得了n
任务的列表,我们需要使用这两个处理器来安排它们。如果无法安排任何一个,则算法必须不返回任何解决方案。请记住,顺序无关紧要,只要没有重叠并且每个任务在截止日期之前完成,哪个处理器获取哪个任务都无关紧要。
所以这里是问题得到概念/抽象的地方,比如我们可以访问一个特殊的小函数,我们不知道它是如何工作的,我们所知道的就是:给出一个n
任务列表和当前计划,它将返回true
或false
,具体取决于算法是否可以从这一点解决。此函数假定已安排的任务是一成不变的,它只会更改未安排的任务的时间。但是,所有这个函数都返回true或false,如果找到解决方案,它将不会给你正确的时间表。关键是你可以在执行调度问题时使用特殊功能。目标是解决调度问题,并使用对特殊函数的多项式调用次数,返回正确调度的每个作业的工作时间表。
编辑:澄清一下,问题是:创建一个解决方案来安排所有n
任务,而不会超过截止日期,使用多项式调用“特殊功能”。
我认为这个问题是为了证明验证解是多项式,但发现它是非多项式的。但是我的教授坚持认为有一种方法可以使用对特殊函数的多项式调用来解决这个问题。由于整个问题是NP-Complete,这将证明运算符的非多项式方面是在算法的“决策部分”中出现的。
如果您希望我澄清任何事情只是发表评论,我知道这不是对问题的完美解释。
答案 0 :(得分:2)
鉴于只有M
或true
的oracle false
:
输入: 任务 - 任务列表 输出: 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
O(N^2)
次M
次调用。k
之后,如果在它之前有一个解,那么它之后仍然有一个解(并且之后)分配一些任务)。在证明这一主张之后,k=#tasks
正式证明上述声明:
假设有一些解决方案{ (tj,pj,xj) | j=1,...,n}
,按j<u <-> xj<xu
排序,并假设t1,t2,...,ti-1的分配与算法产生的相同(归纳假设)。
现在,我们将分配ti
,我们将能够执行此操作,因为我们将找到最小的可用时间戳(xi
),并在其上放置一些任务。我们将找到一些任务,因为ti
是可能的 - 它不会失败&#34;和收益&#34; NO_SOLUTION&#34;。
另外,由于算法不能产生&#34; NO_SOLUTION&#34;在迭代i
中,从M
的正确性,它将产生一些任务t
,通过分配(t,p,x)
- 仍然会有一个解决方案,以及对步骤的声明{证明{1}}。