活動安排的最優解,一般是貪心演算法的思路求取.每一次選擇 相對於當前時間 最早結束的活動,得到的子串行是活動的乙個最優安排,即在一段時間內安排的活動數最多.
貪心演算法執行到第k步,選擇了k項活動 i1,i2,ik
則存在最優解a,就是所選的這k項的集合 a =
意思就是,要證明我們所用的貪心演算法,每一步都是最優解
設共有n項活動待安排,活動的開始時間分別是s1,s2,…sn
活動的結束時間分別是 f1,f2,…fn
將這n個活動按照最早結束時間排好序,也就是f1,f2,…fn從小到大排好序
排好序的n個活動設為s =
這個活動安排題目的最優解,即安排的活動數最多的子串行,設為a
一共需要選擇x次得到最優解
當演算法執行到第k步的話,表示當前已經選擇了k項活動.
當k=1時,我們需要證明最早結束的活動a1,一定被選中
此時任取最優解b(其實就剛剛選了乙個活動),如果b中第乙個活動不是a1,那麼可以用a1,替換b中的第乙個活動
替換過後的b』也是當前的最優解.所以無論第乙個活動在不在b裡,都能找到最優解a使得第乙個活動一定在最優解a裡
假設演算法執行k次時,得到的是最優解
a =
演算法還沒有執行完畢,a中剩下活動選自集合s』 =
s』中的元素肯定輸入原集合,但是因為此時已經安排好了k個活動,如果要接著選,那麼被選到的活動的開始時間一定是大於等於第k個活動的結束時間
假設從s』中選擇的活動集合是c,那麼按照我們的貪心演算法c是s』的最優解
整體的最優解a = u c
如果c不是最優解,d是最優解,說明d中包含的活動比的多
那麼整體的最優解應該是 a = u d
與a = u c是最優解相矛盾
到此我們在假設貪心演算法執行k次,所選擇的集合是最優解的條件下
推出 a = u c
那麼當演算法執行k+1次時,即從s』中再選出乙個元素 i(k+1) 時,根據上面的假設,我們知道 i(k+1) 一定是s』中開始時間最早的活動,而且c是s』的最優解,
所以 u 也是原問題的最優解.
k=1時,一定會選最早開始的活動
假設 k = k時成立
也就是最優解 a = u c
那麼有 k = k + 1時
a = u
所以對於這道活動安排題,貪心演算法所取得的就是最優解
這東西不像數學公式那樣,有板有眼的
我自己理解的也不是很透徹
應該多分析分析就好了吧,畢竟小菜雞不能變成北京烤鴨
活動安排 貪心演算法
活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心演算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了乙個簡單 漂亮的方法使得盡可能多的活動能相容地使用公共資源。設有n個活動的集合e 其中每個活動都要求使用同一資源,如演講會場等,而在同...
活動安排問題 貪心演算法
問題表述 設有n個活動的集合 e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活 i都有乙個要求使用該資源的起始時間 si和乙個結束時間 fi,且 si 如果選擇了活動 i,則它在半開時間區間 si,fi 內占用資源。若區間 si,fi 與區間 sj,...
活動安排問題(貪心演算法)
類似的問題是 選點問題和區間覆蓋問題。活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心演算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了乙個簡單 漂亮的方法使得盡可能多的活動能相容地使用公共資源。設有n個活動的集合e 其中每個活動都...