概要
三分探索を行うと極小点が つも求まらないような数列を構成した。 また、一般の数列に対して の時間計算量で極小点を つ求めるアルゴリズムを説明する。
定義
を実数列とする。 整数 が の極小点であることを、 を満たすことと定義する。 ただし仮想的に とする。
三分探索
が丁度 つの極小点を持つとき、三分探索を用いると に 回アクセスすることでその極小点を求めることができる。 三分探索は以下のようなアルゴリズムである。
最初、 とする。 「 の極小点 が を満たす」という条件を維持したまま を狭めていく。
の場合
が極小点であり、アルゴリズムを終了する。
の場合
とする。 は隣接項の差が 以上であるから、それぞれに floor 関数を適用した は狭義単調増加列になることに注意。
の場合
と更新して繰り返す。
の場合
と更新して繰り返す。
が起こるたびに は 以下になるから、時間計算量は である。
三分探索で極小点が求まらないような一般の数列
の例を図示した。 数列ではなく関数のグラフになっているが、適当に離散化して考えて欲しい。
回のイテレーションの後 となり、極小点が存在しないことが分かる。
一般の数列に対して、極小点を つ求めるアルゴリズム
黄金分割探索は、一般の数列に対しても つ極小点を求めることができる (詳細略)。 本記事では、黄金分割探索とは異なるアルゴリズムを説明する。
最初 とする *1。 「 かつ 」を満たすという条件を保ちつつ、 を狭めていく。
の場合
であり、不変条件から が極小点である。アルゴリズムを終了する。
の場合
とする。 である。
の場合
不変条件と併せて である。 特に より も満たされるため、 と更新して繰り返す。
の場合
の場合と対称である。 と更新して繰り返す。
の場合
と更新して繰り返す。
と定義すると、 が起こるたびに は 以下になるから、時間計算量は である。
*1:実は としてもほとんど問題ないが、イメージのしやすさのため は中央付近に取った