我正在研究贪心算法,我想知道不同案例的解决方案。
对于区间选择问题,我们希望选择不会相互冲突的最大活动数,因此选择具有最早结束时间的作业。
另一个例子;我们有n个工作岗位,我们希望以尽可能少的资源购买。在这里,我们可以从左到右对所有作业进行排序,当我们遇到一个新的起始点时,我们递增一个计数器,当我们遇到一个终点时,我们递减计数器。因此,我们从这个柜台获得的最大价值将是我们需要购买的资源数量。
但是,例如,如果我们有n个任务但k资源怎么办?如果我们买不起更多k资源怎么办?应该是一个贪婪的解决方案来尽可能少地删除任务以满足这个要求吗?
如果我写的最后一个问题有一个特定的名字,我很乐意听到。
答案 0 :(得分:1)
这看起来像我们只有一个资源的版本的一般情况。
直观地说,仍然按照结束时间对作业进行排序并按顺序逐个进行排序。现在,我们跟踪最后一个工作的结束时间,而不是我们资源中接受的最后k个工作的结束时间。对于每个作业,我们检查当前作业的开始时间是否大于我们任何一个资源中的最后一个作业。如果没有找到这样的资源,我们会跳过这个工作并继续前进。如果找到一个资源,我们将该作业分配给该资源并更新结束时间。如果有多个资源可以承担该作业,则将其分配给具有最新结束时间的资源是有意义的。
我真的没有这种贪婪策略的证据,所以这可能是错的。但我无法想到改变选择可能使我们能够完成更多工作的情况。