貪心法解活動安排問題

     [問題]設有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加入最優解集合中。直觀上,這將爲未安排活動留下儘量多的時間。也就是說,該貪心選擇策略的意義是使剩餘的可安排時間段最大化,以便安排儘量多的相容活動。

      也能夠換一種貪心策略,不是選擇第一個結束的活動,而是選擇最後一個開始、且與以前選擇的活動相兼容的活動。

相關文章
相關標籤/搜索