貪心演算法 之 最多區間排程問題

2021-08-27 03:56:42 字數 1205 閱讀 2259

問題主題:區間排程問題

問題描述:

有n項工作,每項工作分別在si開始,ti結束。對每項工作,你都可以選擇參加或不參加,但選擇了參加某項工作就必須至始至終參加全程參與,即參與工作的時間段不能有重疊(即使開始的時間和結束的時間重疊都不行)。

限制條件:

1<=n<=100000

1<=si<=ti,=109

樣例:

輸入n=5

s=t=

輸出3(選擇工作1, 3, 5)

下面有幾種最容易想到的貪心策略:

其中,第二個貪心策略是正確的。

其餘的在白書上 都是有反例的。

證明:

顯然,該演算法最後選出的區間不互相重疊,下面證明所選出區間的數量是最多的。設fi為該演算法所接受的第i個區間的右端點座標,gi為某最優解中的第i個區間的右端點座標。

命題1.1i>=1時,該演算法所接受的第i個區間的右端點座標fi<=某最優解中的第i個區間的右端點座標gi

該命題可以運用數學歸納法來證明。對於i=1,命題顯然為真,因為演算法第乙個選擇的區間擁有最小右端點座標。令i>1,假定論斷對i-1為真,即設該演算法選出了k個區間,而最優解選出了m個區間。

命題1.2最優解選出的區間數量m=該演算法選出的區間數量k

假設m>k,根據命題1.1,有綜上所述,演算法選出的區間是最優解。

**贅述.  將工作按照結束時間由大到小排序,每一次都儲存最後乙個工作的結束時間 t ,然後判斷下乙個工作的開始時間與 t 的大小,再確定是否能夠選擇。

區間排程問題 貪心演算法

問題 有 n 項工作,每項工作分別在 s i 時間開始,在 t i 時間結束 對於每項 工作,你都有可以選擇參與與否。如果選擇了參與,那麼自始自終都必須全程參與。此外,參與工作的時間段不能重疊 即使是開始的瞬間和結束的瞬間的重疊也 是不允許的 include include include usin...

區間排程問題 貪心演算法

一 題目 區間排程問題 有n項工作,每項工作分別在si時間開始,在ti時間結束。對於每項工作,你都可以選擇參與與否。如果選擇了參與,那麼自始至終都必須全程參與。此外,參與工作的時間段不能重複 即使是開始的瞬間和結束的瞬間的重疊也是不允許的 你的目標是參與盡可能多的工作,那麼最多能參與多少項工作呢?1...

區間排程 貪心演算法

一 找到數目盡可能多的相容任務 假設每個任務j從sj開始到fj結束。若要找到盡可能多的相容任務,只需要將所有任務按照結束時間排序,每次都選擇最早結束的那個任務。因為每次選最早結束的,則留給之後的時間就越多。在餘下的時間中與被選的那個任務衝突的任務最多也只能有乙個被選 代替現在被選的這個任務 但是留下...