这是一个非常难以动态的编程问题,我想与您分享,我们可以对其解决方案进行一些讨论:
您将把新应用程序放到云服务器上;你必须安排你的工作,以获得最低的成本。您不需要关心同一服务器上同时运行的作业数。每个作业k由释放时间sk,截止时间fk和持续时间dk给出,其中dk≤fk-sk。这个工作需要安排在时间sk和fk之间连续dk的间隔。服务器公司将按服务器每分钟收费。您只需要一个虚拟服务器,您可以节省资金,将工作从sk移动到fk周围,以最大限度地延长任何作业的时间,或者换句话说,最大限度地减少运行一个或多个作业的时间。使用动态编程来解决问题。你的算法应该是n的多项式,即作业数。
答案 0 :(得分:1)
这是最小化繁忙时间的问题。
见this paper的定理17:
Rohit Khandekar,Baruch Schieber,Hadas Shachnai和Tami Tamir。最大限度地减少多台机器实时的繁忙时间 调度。在第30届软件技术与理论计算机基础年会上的论文集 科学(FSTTCS),第169-180页,2010年
关于多项式时间算法的描述。
关键是:
要意识到只需要考虑某些有趣的时间(如果你有一个时间表,请考虑延迟每个繁忙的时间间隔,直到你达到其中一个正在处理的工作的截止日期)
考虑何时完成最长持续时间的工作。这将问题分成两部分;之前和之后,可以在正常的动态编程方式中独立解决。