算法题请教
老师,我想请教一个问题,希望老师能提供些思路,先谢谢老师。
假设有若干个待执行的任务,每个任务执行时间不同,有长有短。
现在可以起固定数量的线程执行这些任务,问如何规划任务的执行顺序,使得能够在最短的时间内执行完所有任务。
28
收起
正在回答
1回答
你的这个问题的描述非常不清晰,有很多细节需要商榷,对于算法问题来说,很多细节非常重要,甚至可能是问题处理的关键。我只能根据我的理解回答。
==========
首先需要说明的,你描述的问题可能无解(即不能处理所有任务),比如 10 个任务都是在 [1, 10] 之间出现,固定有五个线程的话,是不可能处理这 10 个任务的。
在这个基础上,如果我们想要使用固定的线程处理尽量多的任务,这是一个很标准的贪心模型。我们应该按照每个任务的结束时间排序,优先处理先结束的任务。因为处理了先结束的任务之后,有更多的时间更大可能性的处理剩下的任务。
整个算法大致是:
按照任务的结束时间顺序排序;
一次遍历每一个任务,对于每一个任务,看当前是否有空闲的线程(或者之前不空闲,但是在这个任务开始的时候,这个线程处理的任务已经结束了)。如果有,分配给这个线程。
如果没有,这个任务无法执行,抛弃(在真实系统中,可以重新分配一个开始时间)
其中对于第二步,对于这些线程当前状态的组织,可以使用堆或者树,把这些线程当前分配的任务的结束时间当做 key,这样可以在 log 的时间里选出可以使用的一个线程。
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星