アルゴリズムと計算量の問題
つの会議室を使いたい 個の予約 A〜J がある。予約 X の開始時刻を 、終了時刻を とし、予約 X は時間帯 ( 以上 未満)に会議室を使う。
| 予約 | A | B | C | D | E | F | G | H | I | J |
|---|---|---|---|---|---|---|---|---|---|---|
つの予約 X, Y は、 または のとき、同時に採用できるものとする。次の貪欲法で予約を採用する。
1. 予約を終了時刻 の小さい順に並べる。
2. その順に予約を つずつ調べ、すでに採用した予約のどれとも同時に採用できるならば採用し、そうでなければ採用しない。
この貪欲法で採用される予約をすべて選び、その記号をアルファベット順に「,」で区切って答えよ(解答例:A, D, G)。
この問題で使うもの
- 区間スケジューリングの貪欲法(説明と入口の問題)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
表の予約を終了時刻の小さい順に並べ替えてから、順に調べていく。
ヒント 2
採用した予約は終了時刻の順に並ぶので、各予約について「開始時刻 最後に採用した予約の終了時刻」かどうかだけを確かめればよい。等号のときも採用できることに注意する。
ヒント 3
最初に B(終了時刻 )が採用され、次に採用されるのは開始時刻が 以上で終了時刻が最も小さい C である。
答えと解説
答えを見る
B, C, F, I
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
終了時刻はすべて異なるので、終了時刻の小さい順に並べると
となる(括弧内は終了時刻)。採用した予約は終了時刻の小さい順に並ぶので、次に調べる予約は「その開始時刻が最後に採用した予約の終了時刻以上か」を確かめればよい。
- B :最初なので採用。最後の終了時刻は 。
- A : なので採用しない。
- C : なので採用。最後の終了時刻は 。
- D : なので採用しない。
- E : なので採用しない。
- F : なので採用(時間帯は半開区間なので重ならない)。最後の終了時刻は 。
- G : なので採用しない。
- H : なので採用しない。
- I : なので採用。最後の終了時刻は 。
- J : なので採用しない。
よって採用されるのは B, C, F, I の 個である。(この貪欲法は、同時に採用できる予約の個数を最大にすることが知られている。)
別解
終了時刻の小さい順に並べると、B(), A(5), C(7), D(8), E(9), F(10), G(12), H(13), I(14), J(15) となる(終了時刻はすべて異なるので並びは一意)。
順に調べる。
- B: 何も採用していないので採用。採用済みの最終終了時刻は 3。
- A: で B と重なる( も も成り立たない)。不採用。
- C: なので採用。最終終了時刻は 7。
- D: で C と重なる。不採用。
- E: で C と重なる(B とも重ならないが C と重なる)。不採用。
- F: (半開区間なので接するだけ)、B とも重ならない。採用。最終終了時刻は 10。
- G: で F と重なる。不採用。
- H: で F と重なる。不採用。
- I: なので採用。最終終了時刻は 14。
- J: で I と重なる。不採用。
検算:採用した B[1,3), C[4,7), F[7,10), I[11,14) はどの 2 つも を満たし、互いに重ならない。
よって採用されるのは B, C, F, I。