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