动态规划之流水作业调度算法
(2012-10-29 21:23:12)
标签:
算法杂谈 |
分类: 算法 |
poj 2751
这道题的大意是2台机器,n件任务,必须先在S1上做,再在S2上做。任务之间先做后做任意。求最早的完工时间。这是一个经典问题:2台机器的情况下有多项式算法(Johnson算法),3台或以上的机器是NP-hard的。思想就是贪心,时间复杂度是O(nlogn)
。
Johnson算法
(1)
把作业按工序加工时间分成两个子集,第一个集合中在S1上做的时间比在S2上少,其它的作业放到第二个集合。先完成第一个集合里面的作业,再完成第二个集合里的作业。
(2)
对于第一个集合,其中的作业顺序是按在S1上的时间的不减排列;对于第二个集合,其中的作业顺序是按在S2上的时间的不增排列。在这里,我一个数组搞定,把这两个集合分别向两边插入。
#include
#include
struct Point
{
}p[10005];
int a[10005],b[10005],c[10005];
int cmp(const void *a,const void *b)
{
}
int main()
{
}