贪心法解活动安排问题

     [问题]设有n个活动的集合E={1,2,……,n}(按其结束时间排序),其中每一个活动都要使用同一个场所,而在同一时间内只有1个活动能使用该场所。每一个活动i的开始时间和结束时间分别为begin[i]和finish[i]。求E的最大相容子集合。排序

     [解析]先选择活动1,活动1具备最先的完成时间。下面证实该问题具备贪心选择性质,即该问题有一个最优解以贪心选择开始,即该最优解中包含活动1。证实过程以下:集合

     设子集A是该问题的一个最优解,且A中的活动按结束时间排序,其第一个活动为k:兼容

     (1)若k=1,则A就是以贪心选择开始的最优解。时间

     (2)若k>1,则设子集B=A-{k}U{1}。因为finish[1]≤finish[k],且A中的活动是相容的,因此B中的活动也是相容的。又因为B中活动的个数与A中相同,且A是最优的,因此B也是最优的。因此B是以贪心选择1开始的最优解。

     综上所述,老是存在以贪心选择开始的最优解。该问题具备贪心选择性质。

     

      在作出了贪心选择,即选择了活动1以后,原问题简化为对E中全部与1相容的活动进行活动安排的子问题。也就是说,若是A是原问题的最优解,则其子集C=A-{1}是该子问题的最优解(由反证法易得,假设该子问题存在一个活动数比C更多的解D,则{1}+D是原问题的一个最优解,且其活动数比A多,得出矛盾)。因此该问题具备最优子结构性质。咱们只要求出该子问题的最优解F,则{1}+F就是原问题的一个最优解。所以,每一步作出的贪心选择都将原问题概括为一个更小的且与原问题具备相同形式的子问题。

      咱们的贪心策略是每次老是选择具备最先完成时间的相容活动i加入最优解集合中。直观上,这将为未安排活动留下尽量多的时间。也就是说,该贪心选择策略的意义是使剩余的可安排时间段最大化,以便安排尽量多的相容活动。

      也能够换一种贪心策略,不是选择第一个结束的活动,而是选择最后一个开始、且与以前选择的活动相兼容的活动。

相关文章
相关标签/搜索