演算法複習周 「貪心問題之 活動安排 」

2022-09-02 13:03:09 字數 1596 閱讀 2195

後天就有乙個概念考試,可是我還沒複習完全。。感覺已經要bowmmmmm了,,,

寫完這個演算法就去複習,不過演算法考試也要臨近了把

演算法介紹:設有n個活動的集合e=,其中每個活動都要求使用同乙個資源(如教室),然後給你每個活動的開始時間和結束時間,問你如何合理安排這幾個活動才能使得這個教室的使用率最大化?

要解決這個問題我們就要使用到貪心演算法了。

演算法詳解:在這裡我們還是用容易理解的例子來給大家講解。

這裡我們給出一道例題。

我們應該如何才能利用貪心演算法安排呢?

這裡的貪心策略是:每次從剩下未安排的活動中選擇最早結束時間且不會與已安排的活動重疊活動來安排。

也就是說我們要按照結束時間來將這十乙個活動從小到大排序

之後當我們排序結束後我們得到:

之後就開始找唄--->

①因為第乙個數結束最早,所以我們一定要選擇第乙個數。

②找從第乙個開始向後遍歷尋找si>f1的第一次出現的活動(這裡是活動4)

③之後就是相同的過程

最後得到最優解。

怎麼樣是不是很簡單??既然簡單那我們就肯定不會只考筆試啊hhh,這裡會考上機題目的,所以我們要將**寫出來。

struct act;

act active[100

];bool boo[100]=;

bool

cmp(act a,act b)

int process(act a,int

n) }

return0;

}

這裡我放上關鍵**,這裡我定義了結構體來儲存兩個數,然後運用algorithm庫中的sort排序按照結束時間排序。 在process函式中我用乙個迴圈直接尋找(這裡用變數j來儲存了上乙個活動的位置)

之後把符合要求的活動對應的bool陣列賦值為true。

最後列印出來得到:::

不過老師說了一句要用集合的形式表現出來,所以如果涉及結果的寫法大家記得寫成{}的形式哈。

這個演算法就算結束了,大家多多練習, 其實並不難。。。加油加油

————————————————————————————————————————made by pinging

貪心演算法之活動安排問題

問題描述 設有 n個活動的集合 e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活動 i都有乙個要求使用該資源的起始時間 si和乙個結束時間fi,且si fi。如果選擇了活動 i,則它在半開時間區間 si fi 內占用資源。若區間 si fi 與區間 ...

貪心演算法之活動安排問題

問題表述 設有n 個活動的集合 e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活 i都有乙個要求使用該資源的起始時間 si和乙個結束時間 fi,且 si 如果選擇了活動 i,則它在半開時間區間 si,fi 內占用資源。若區間 si,fi 與區間 sj...

活動安排問題 貪心演算法

問題表述 設有n個活動的集合 e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活 i都有乙個要求使用該資源的起始時間 si和乙個結束時間 fi,且 si 如果選擇了活動 i,則它在半開時間區間 si,fi 內占用資源。若區間 si,fi 與區間 sj,...