演算法分析與設計作業10 貪心演算法 相容問題

2021-10-05 18:03:59 字數 1075 閱讀 4249

有n項活動申請使用同乙個禮堂,每項活動有乙個開始時間和乙個截止時間。如果任何兩個活動不能同時舉行,問如何選擇這些活動,從而使得被安排的活動數量達到最多。

將輸入的一組開始與截至時間按結束時間公升序排列:

依次遍歷每個活動,根據已選擇的最後乙個活動的結束時間和遍歷到的活動的開始時間來判斷是否將該活動選擇。

步驟:已選擇陣列y={}

第1個活動,結束時間最早,直接選擇。y=

第2個活動,開始時間不早於y中最後乙個活動的結束時間,選擇。y=

第3個活動,開始時間早於y中最後乙個活動的結束時間,不選擇。y=

第4個活動,開始時間不早於y中最後乙個活動的結束時間,選擇。y=

第5個活動,開始時間早於y中最後乙個活動的結束時間,不選擇。y=

第6個活動,開始時間早於y中最後乙個活動的結束時間,不選擇。y=

最終選擇的活動為1,2,4。

若將輸入的一組開始與結束時間按開始時間公升序排列:

仍按此前的方法進行遍歷得到的結果為y=,顯然不是最優解。

若將輸入的一組開始與結束時間按持續時間公升序排列:

依然按照此前的方法進行遍歷得到的結果為y=,也不是最優解。

num=

while

(輸入不為0):

(開始時間,結束時間)

)nn=

sorted

(num)

//以結束時間為key,公升序

for i in nn:

if(i 是第乙個)

: 直接選擇

else

: 開始時間不早於已選擇的最後乙個的結束時間就選擇

時間複雜度:o(nlogn) //實際就是個排序的複雜度

演算法設計與分析 貪心演算法

time limit 1000 ms memory limit 65536 kib problem description 一輛汽車加滿油後可行駛n公里。旅途中有若干個加油站。設計乙個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。並證明演算法能產生乙個最優解。對於給定的n和k個加油站位...

演算法設計與分析 貪心演算法

分解 將原問題求解過程劃分為連續的若干個決策階段 決策 在每乙個階段依據貪心策略進行貪心決策,得到區域性的最優解,並縮小待求解問題的規模 合併 將各個階段的區域性解合併為原問題的乙個全域性最優解 greedy c c是問題的輸入集合即候選集合 初始解集合為空集 while not solution ...

演算法設計與分析 貪心演算法

所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。貪心演算法的基本思路如下 1.建立數學模型...