乗法二分探索

乗法二分探索
7 がターゲット値である乗法二分探索アルゴリズムの視覚化。
クラス検索アルゴリズム
データ構造配列
最悪のパフォーマンスO (log n )
最高のパフォーマンスO (1)
平均的なパフォーマンスO (log n )
最悪の場合の空間複雑度O (1)
最適はい

コンピュータサイエンスにおいて、乗法二分探索は二分探索の一種で、通常の二分探索で使用されるソート順ではなく、配列内のキーの特定の順列を使用する。[ 1 ] 乗法二分探索は1980年にThomas Standishが初めて説明した。このアルゴリズムはもともと、効率的な除算やシフト演算を行わない小型コンピュータでの中点インデックス計算を簡略化するために提案された。現代のハードウェアでは、乗法二分探索のキャッシュフレンドリーな性質により、BツリーB+ツリーの代わりとして、ブロック指向ストレージでのアウトオブコア探索に適している。最適なパフォーマンスを得るには、 BツリーまたはB+ツリーの分岐係数が、それが保存されているファイルシステムのブロックサイズと一致する必要がある。乗法二分探索で使用される順列は、ブロックサイズに関係なく、最初の(ルート)ブロックに最適な数のキーを配置する。

乗法二分探索は、一部の最適化コンパイラでswitch文を実装するために使用されます。[ 2 ] [ 3 ]

アルゴリズム

乗法二分探索は、並べ替えられた配列に対して実行されます。キーは、対応するバランス二分探索木のレベル順に格納されます。これにより、二分探索の最初のピボットが配列の最初の要素に配置されます。2番目のピボットは、次の2つの位置に配置されます。

値がA 0 ... A n −1であるn要素の配列Aとターゲット値Tが与えられた場合、次のサブルーチンは乗法バイナリ検索を使用してA内のTのインデックスを検索します。

  1. iを0に設定する
  2. inの場合、検索は失敗して終了します。
  3. A i = Tの場合、検索は終了です。i を返します
  4. A i > Tの場合、i をi + 1 に設定し、手順 2 に進みます。
  5. A i < Tの場合、i をi + 2 に設定し、手順 2 に進みます。

参照

引用

  1. ^スタンディッシュ、トーマス・A. (1980). 「第4.2.2章 順序付きテーブル検索」.データ構造テクニック. アディソン・ウェスレー. pp.  136–141 . ISBN 978-0201072563
  2. ^ Sayle, Roger A. (2008年6月17日). 「スーパーオプティマイザーによる多分岐コード生成の分析」(PDF) . GCC開発者サミット議事録: 103–116 . 2017年3月4日閲覧
  3. ^ Spuler, David A. (1994年1月).静的探索問題としての多分岐文に対するコンパイラコード生成(技術レポート). オーストラリア、ジェームズクック大学、コンピュータサイエンス学部、94/03.