アルゴリズムと計算量の問題
台の機械で 個の仕事 をすべて処理する。仕事 には処理時間 と重み が次のように定まっている。
| 仕事 | ||||||
|---|---|---|---|---|---|---|
| 処理時間 | ||||||
| 重み |
機械は時刻 から使うことができ、どの仕事も時刻 の時点ですでにそろっていて、いつでも処理を始められる(仕事ごとの到着時刻や締め切りの制約はない)。機械は同時に つの仕事しか処理できない。また、仕事を途中で中断することはできない(仕事 を始めたら、 だけ時間がたって終わるまで処理を続ける)。仕事 の処理が終わる時刻を とする。
仕事を処理する順序(および開始時刻)をうまく選んで
をできるだけ小さくしたい。 の最小値を求めよ。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
どの仕事も時刻 から始められるので、機械を休ませても得はせず、隙間なく処理するとしてよい。決めるのは順序だけである。隣り合う つの仕事を入れかえたとき がどう変わるかを調べよう。
ヒント 2
隣り合う仕事 を の順から の順に入れかえると、(入れかえ前の )(入れかえ後の ) となり、他の仕事の終了時刻は変わらない。このことから、 の小さい順に処理するのが最適だとわかる。
ヒント 3
比 の小さい順に並べると となる。この順で処理時間を順に足して各仕事の終了時刻を求め、重みをかけて合計しよう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
空き時間を入れる必要はないこと どの仕事も時刻 から処理を始められるので、機械を休ませる時間があっても、それ以降の仕事の終了時刻がすべて遅れるだけで は小さくならない。よって時刻 から隙間なく処理するとしてよく、決めるべきなのは処理の順序だけである。順序は 通りの有限個なので、最小値は存在する。
交換による議論(貪欲法の根拠) ある順序で、隣り合う つの仕事 がこの順に処理され、 の開始時刻が であるとする。このとき の部分の寄与は
である。 と を入れかえて の順にすると、寄与は
となる。 つの仕事が占める時間帯全体は変わらないので、他の仕事の終了時刻は変わらない。入れかえ前から入れかえ後を引いた差は
である。したがって (すなわち )なら、入れかえると は真に小さくなる。
よって最適な順序では、隣り合う仕事について常に が成り立つ。つまり、 の小さい順に処理するのが最適である(スミスの規則)。今回は比の値がすべて異なるので、この順序はただ一つに決まる。
比の計算
小さい順に並べると となる。
終了時刻と の計算
- :、
- :、
- :、
- :、
- :、
- :、
したがって
となる。よって最小値は である。
別解
1 台の機械で重み付き完了時刻和 を最小にする問題なので、Smith の規則(WSPT 規則)を使う。 の小さい順に処理すればよい。
各仕事の は次のとおり。
F: 、C: 、B: 、A: 、E: 、D: 。
よって最適な順序は F, C, B, A, E, D である。この順序での完了時刻は
。
。
検算として隣接する 2 仕事を入れ替えてみる。たとえば A と E を入れ替えると、E の完了が 12、A の完了が 15 になる。このとき で、元の より大きい。したがって元の順序のほうが小さい。
また に同じ値がないので、最適な順序は一意である。待ち時間(空き時間)を入れても は小さくならない。
以上より、 の最小値は 。