現(xiàn)需要申請(qǐng)一些場(chǎng)地舉辦一批活動(dòng),每個(gè)活動(dòng)有開始時(shí)間和結(jié)束時(shí)間。在同一個(gè)場(chǎng)地,如果一個(gè)活動(dòng)結(jié)束之前,另一個(gè)活動(dòng)開始,即兩個(gè)活動(dòng)沖突。若活動(dòng)A從1時(shí)間開始,5時(shí)間結(jié)束,活動(dòng)B從5時(shí)間開始,8時(shí)間結(jié)束,則活動(dòng)A和B不沖突?,F(xiàn)要計(jì)算n個(gè)活動(dòng)需要的最少場(chǎng)地?cái)?shù)。
求解該問(wèn)題的基本思路如下(假設(shè)需要場(chǎng)地?cái)?shù)為m,活動(dòng)數(shù)為n,場(chǎng)地集合為P1,P2,…,Pm),初始條件Pi均無(wú)活動(dòng)安排:
(1)采用快速排序算法對(duì)n個(gè)活動(dòng)的開始時(shí)間從小到大排序,得到活動(dòng)a1,a2,…,an。對(duì)每個(gè)活動(dòng)ai,i從1到n,重復(fù)步驟(2)、(3)和(4);
(2)從p1開始,判斷ai與P1的最后一個(gè)活動(dòng)是否沖突,若沖突,考慮下一個(gè)場(chǎng)地P2,…;
(3)一旦發(fā)現(xiàn)ai與某個(gè)Pj的最后一個(gè)活動(dòng)不沖突,則將ai安排到Pj,考慮下一個(gè)活動(dòng);
(4)若ai與所有己安排活動(dòng)的Pj的最后一個(gè)活動(dòng)均沖突,則將ai安排到一個(gè)新的場(chǎng)地,考慮下一個(gè)活動(dòng);
(5)將n減去沒有安排活動(dòng)的場(chǎng)地?cái)?shù)即可得到所用的最少場(chǎng)地?cái)?shù)