N個の区間(開始Si 終了Ti)がある。共通部分がないようになるべく多くの区間を選びたい。
この時最も早い終了の区間()を順に選んでいく貪欲法が最適解をもたらすことが知られている。
なぜか?
- 最初の一つの区間を選ぶ
- 区間が1つ以上あるなら、そこから1つ選ぶことができる。
- 「最後に選んだ区間の終了」をFと呼ぶことにする。
- 最も早い終了の区間を選ぶ選び方は1個の可能な選び方のうち最もFが小さい。(Fmin_1とする)
- Fより前に開始のある区間は今後選択不能である。
- 選んだ区間と交差するから。
- 既にk個の区間が選ばれており、k+1番目を選ぶことを考える。
- Fより後に開始のある区間が1つ以上ある時、そこから1つ選ぶことができる。
- あるF > Fmin_kで1つ選ぶことができるならF = Fmin_kでも一つ選ぶことができる。
- その選ばれてるものを選べばよいから。
- Fmin_kより後に開始のある区間から最も早い終了の区間を選ぶ
- これはk+1個の可能な選び方のうち最もFが小さい。(Fmin_{k+1}とする)
- 数学的帰納法によりn個の区間を選ぶ方法があるなら、この方法でn個選ぶことができる
http://www.prefield.com/algorithm/misc/interval_scheduling.html