呃。。上学期学的好多东西,又忘了好多。也就是这个最简单的小方法还记得
问题: 流水线生产,每一个生产过程需要在两台机子上先后执行(即,在第一台机子装内部件,在第二台机子上装外部件)。假设工厂收到了1000个客户订购的不同产品,他们需要生产这些产品。如何以最快的方式去生产完这个产品呢? 我们不考虑任何其他的因素,只考虑如何能让这1000个产品在工厂最快的生产,因为这样子的话工厂的工作效率提高,能做的东西也就多了。
我这里用一个小例子解释如何算法,
假设,有十个任务
任务在机器上1生产需要的时间:10,5,6,7,52,41,21,15,23,56
任务在机器上2生产需要的时间:15,50,61,27,12,41,22,16,25,30
解法:
我们将先找出,第一台机子生产时间比第2台机子生长时间短或者相等的任务拿出来,分别是
10,5 ,6 ,7 ,21,15,23,41
15,50,61,27,22,16,25,41
我们再根据第一台机子的从小到达排序,则是5,6,7,10,15,21,23这个顺序排列这些任务。我们按照这个顺序放在机器生产的前面
我们再找出,第一台机子上生产时间比第二台机子生产时间长的任务:
52,56
12,30
我们根据第2台机子的任务时间从大到校排序,则是(仍然根据第一台机子的任务时间给出结果)56,52
将上面的两个排序的结果合并在一起,就成了5,6,7,10,15,21,23,56,52这个顺序
这就是Johnson算法处理flowshop2简单问题的方法,当然这个解一定是最优解
时间复杂度 O(n*logn) (可能是错的。。)
所以,计算机就是这么简单的在提高大家的劳动力的~吼吼!这个算法虽然用起来简答,不过我还是没想到他是怎么证明这就是最优算法的。我能臆断,但是没有科学的方法。我记得老师讲过。。忘了。。其实给我自己想,想一周也能出来,证明的话。。呃呃呃