1. 程式人生 > >貪心演算法之區間圖著色問題

貪心演算法之區間圖著色問題

CLRS 16.1-3 假設要用很多個教室對一組活動進行排程。我們希望使用盡可能少的教室來排程所有的活動。請給出一個有效的貪心演算法,來確定哪一個活動應使用哪一個教室。

(這個問題也被成為區間圖著色(interval-graph coloring)問題。我們可作出一個區間圖,其頂點為已知的活動,其邊連線著不相容的活動。為使任兩個相鄰結點的顏色均不相同,所需的最少顏色對應於找出排程給定的所有活動所需的最少教室數。)

方法一:
我們很容易就可以想到用P227頁的GREEDY-ACTIVITY-SELECTOR(s, f)來解決這個問題,首先呼叫這個函式,得到可以相容的最大活動數,然後再在餘下的活動中再次呼叫這個函式,直至活動為0。 

方法二:
1.對於所有活動的時間點按升序進行排序(n個活動,就有2n個時間點),記錄每個時間是起始的還是終止的,在排序的時候,對於值相同的時間點,如果是終止時間點的話,就排在前面。
2.最開始,選擇第一個起始時間點,把它對應的活動放入一個教室,同時記錄這個起始時間點對應的終止時間點。
3.接著按序選擇第i個起始時間點(只選擇起始時間點),對於第i個起始時間點,比較它和已有教室中的活動的終止時間點,若大於某個終止時間點(若大於好幾個在不同教室活動的終止時間點呢?放進哪一個教室?),則直接將第i個起始時間點對應的活動放進相應的教室,否則新開闢一個教室來放入這個活動。 

對於區間圖著色(interval-graph coloring)問題

,先在一個集合中放入一個點,然後把不與這個點相鄰的所有元素(這些元素也應該互不相鄰吧)放入這個集合,對於剩下的點,重複前面的動作即可,依此迴圈,直至沒有點可選。最後,有多少個集合就是多少種顏色,集合中的元素用相同的色渲染。

轉自http://www.cnblogs.com/shuaiwhu/archive/2012/05/15/2499863.html