アルゴリズムと計算量の問題
つの会議室を使いたい 件の予約に番号 〜 が付いており、それぞれの利用時間は次の半開区間 (開始時刻 から終了時刻 の直前まで)である。
| 予約の番号 | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| 開始 | |||||||||
| 終了 |
利用時間が重ならない予約をできるだけ多く選ぶために、次の貪欲法を使う(ある予約の終了時刻と別の予約の開始時刻が等しい場合は重ならないとみなす)。
1. 予約を終了時刻 の小さい順に並べる。
2. 直前に選んだ予約の終了時刻を とする(最初は )。並べた順に予約を 1 つずつ見て、開始時刻 が を満たせばその予約を選び、 をその予約の終了時刻に更新する。満たさなければ選ばない。
この貪欲法によって選ばれる予約の番号の集合を求めよ。
この問題で使うもの
- 区間スケジューリングの貪欲法(説明と入口の問題)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
まず 9 件の予約を終了時刻の小さい順に並べ替えましょう。
ヒント 2
「直前に選んだ予約の終了時刻 」を記録しながら、開始時刻が 以上かどうかを順に判定します。終了時刻と開始時刻が等しいときは選べることに注意しましょう。
ヒント 3
最初に予約 が選ばれて 、次に予約 が選ばれて になります。その後を続けましょう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
終了時刻はすべて異なるので、終了時刻の小さい順に並べる順序は一意に決まり、
となる(この問題では番号の順がそのまま終了時刻の順になっている)。この順に調べる。
- 予約 : なので選ぶ。。
- 予約 : なので選ばない。
- 予約 : なので選ぶ。。
- 予約 : なので選ばない。
- 予約 : なので選ばない。
- 予約 : なので選ぶ。。
- 予約 : なので選ばない。
- 予約 : なので選ぶ。。
- 予約 : なので選ばない。
よって選ばれる予約の番号の集合は で、 件である。
(予約 は予約 の直後に置くこともできるが、終了時刻のより早い予約 が先に選ばれるため選ばれない。終了時刻の早い順に選ぶこの貪欲法は、重ならない予約の件数を最大にすることが知られている。)
別解
終了時刻 の小さい順に並べると、番号は で、 の値はすべて異なるので順序は一意に決まる。
から始める。
- 予約 1: なので選ぶ。。
- 予約 2: なので選ばない。
- 予約 3: なので選ぶ。。
- 予約 4: なので選ばない。
- 予約 5: なので選ばない。
- 予約 6: なので選ぶ。。
- 予約 7: なので選ばない。
- 予約 8: なので選ぶ。。
- 予約 9: なので選ばない。
よって選ばれる予約の番号の集合は 。
検算: 選んだ区間 は互いに重ならない。