活动/任务选择问题

给定n个活动,已知它们的起止时间,如何选择活动能够使得单个人能够完成最多数量的活动,假设单个人同一个时间只能做单个活动。
例1:考虑下面三个活动,

活动 开始时间 结束时间
活动1 10 20
活动2 12 25
活动3 20 30

则单人最多可以完成两个活动:1和3
例2:考虑下面六个活动,

活动 开始时间 结束时间
活动1 1 2
活动2 3 4
活动3 0 6
活动4 5 7
活动5 8 9
活动6 5 9

则最多可以完成四个活动:1,2,4,5


思路是使用贪心方法,首先将活动按照结束时间进行排序,每次都选择结束时间最近的的活动,但要保证当前选择的活动开始时间不早于前一活动的结束时间。

证明:(反证法)
首先将活动安装结束时间排序,假设存在更多的新的活动选择。则某个时间点选择的不是当前可行的最近可以完成的活动,后面的所有可行活动选择都可能被选择,所以新的选择活动总数量不会大于按照结束时间选择的活动总数量。矛盾。

你可能感兴趣的:(活动/任务选择问题)