簡體   English   中英

區間划分問題不同的方法 - 在最少數量的教室中安排講座

[英]Interval partitioning problem different approach - arrange lectures in minimum number of classrooms

在最小數量的教室中安排講座的問題如下:找到最小數量的教室來安排所有的講座,這樣就不會在同一個房間里同時發生兩堂課。

我在書中找到的常用算法是:

Sort intervals by starting time so that s1 ≤ s2 ≤ ... ≤ sn.
d ← 0 //number of classrooms
for j = 1 to n {
 if (lecture j is compatible with some classroom k)
 schedule lecture j in classroom k
 else
 allocate a new classroom d + 1
 schedule lecture j in classroom d + 1
 d ← d + 1
}

現在,我正在考慮另一種方法,我通過按升序完成時間對我的講座進行排序,每次我檢查講座 j 是否與某個教室 k 兼容並且有多個教室與該講座兼容時,我將其安排在那個教室最后一個作業完成時間最接近那個作業開始時間的教室,即最小化教室空置的時間。

Sort intervals by starting time so that f1 ≤ f2 ≤ ... ≤ fn.
d ← 0 //number of classrooms
for j = 1 to n {
 if (lecture j is compatible with some classroom k)
 schedule lecture j in classroom k which was used last
 else
 allocate a new classroom d + 1
 schedule lecture j in classroom d + 1
 d ← d + 1
}

我想知道這種方法是否正確(不一定是最佳的)。 我已經在幾個案例上進行了試運行,看起來還不錯。 如果是,我如何證明它的正確性? 如果沒有,我怎樣才能使算法起作用。

是的,它會起作用的。
您必須維護一個數組 End[] ,它可以告訴您教室的最后 class 時間。
所以,在你的排序數組上運行一個循環,每次講座訪問所有已經初始化的教室。 如果您有一個 End[classroom id] < start[current Lecture] 的教室,那么您可以使用,否則您必須初始化一個新教室。

另一種方法是:

如果您獨立知道所有講座的最短開始時間和最長結束時間。 然后你必須從最小開始時間到最大結束時間運行一個循環,並計算當前時間舉行了多少講座。 所有 i(最小時間 <=i <= 最大時間)中的最大計數是您的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM