學習演算法也有一段時間了,可一直沒怎麼找到門道在**。上一周學習揹包問題的時候整的我人頭都大了兩圈,剛開始學習貪心演算法,老師留了這麼一道題,老師提示了一下,然後我結合課本和網上很多牛人寫的部落格,自己研究一下,很快就寫了出來。這個演算法的時間複雜度是o(n)的,應該說是比較簡單的,尤其是學完揹包問題之後。好了,廢話少說,我先把問題描述一下:
有n個活動,每個活動都有乙個開始時間和結束時間,現在要實現的是,在活動能滿足相容的條件下(所謂相容,是指當前活動執行期間,沒有其他活動參與進來,而是要等到當前活動結束之後才開始,這句話反射到程式中也就是要另乙個活動的開始時間必須大於等於當前執行活動的結束時間),找到最優的活動安排方案。
思路分析:
為了達到目的,我得需要乙個函式吧,這是最起碼的要求,然後想,我的函式中需要什麼樣的引數呢?恩,為了遍歷每個活動,我得需要乙個陣列存放當前的活動,同時呢每個活動都有自己的開始時間和結束時間,這當然不是程式中活動本身具有的屬性,而是人為定義的。因為在前面一段話的括號裡我強調了判斷條件,所以我們有必要把開始時間和結束時間分開存放。基本了解了程式的要求和目的,我們來看**:
#includeusing namespace std;
class activity
~activity(){}
public:
//活動選擇器
總結與反思:
程式裡最容易出現問題的地方就是在判斷相容性的時候,一定要小心。
關於活動安排演算法
描述 設有n 個活動的集合 e 其中每個活動都要求使用同乙個資源 如演講會場 而在同一時間內只有乙個活動能使用這一資源。每個活動 i都有乙個要求使用該資源的起始時間 si和乙個結束時間 fi,且 si。如果選擇了活動 i,則他在改時間區間 si,fi 內占用資源,若區間 si,fi 和區間 sj,f...
貪心之活動安排
問題描述 設有n個活動的集合e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活動i都有乙個要求使用該資源的起始時間si和乙個結束時間fi,且si 求解思路 將活動按照結束時間進行從小到大排序。然後用i代表第i個活動,s i 代表第i個活動開始時間,f ...
貪心演算法之活動安排問題
問題描述 設有 n個活動的集合 e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活動 i都有乙個要求使用該資源的起始時間 si和乙個結束時間fi,且si fi。如果選擇了活動 i,則它在半開時間區間 si fi 內占用資源。若區間 si fi 與區間 ...