数値探索のアルゴリズム
予備知識
線形探索
このアルゴリズムで出来ること
データ構造から特定の値を探索する
※ここでデータ構造は配列とする
動作順序
①配列の先頭から順に要素を選択する
②その要素が特定値であるか比較する
計算対象選別
判定 | 計算対象 | 関係 | 数値 |
---|---|---|---|
○ | データの比較回数 | ≧ | 1 |
データの交換回数 | = | 0 | |
関数の呼び出し回数 | = | 0 |
変数定義
変数にする対象 | 変数 | 関係 | 数値 |
---|---|---|---|
配列の最大要素数 | > | 1 |
一般化
最善の計算量
最善の計算量となるのは
配列の先頭の要素が特定値のときである
このときのデータの比較回数すなわち計算量は
漸近計算量は
最悪の計算量
最悪の計算量となるのは
配列の末尾の要素が特定値のときである
このときのデータの比較回数すなわち計算量は
漸近計算量は
平均の計算量
配列の最大要素数が5のとき
特定値は配列の要素の1つ目から5つ目までのいずれかの5通りである
よって自然数1~5の平均値が平均の計算量である
この場合の中央値を求めるには範囲の先頭と末尾の数値を足して半分にする
漸近計算量は
確かめ算
5 | 3 |
6 | 3.5 |
7 | 4 |
8 | 4.5 |
一般式の一覧表
二分探索
このアルゴリズムで出来ること
昇順または降順のデータ構造から特定の値を探索する
※ここでデータ構造は配列とする
※比較する範囲が半分ずつ減っていく
動作順序
①配列のすべての要素を比較範囲に設定する
②配列の中央の要素が特定値であれば完了とし異なる場合は③へ
③以下の条件で新たな比較範囲を設定して②に戻る
- 配列の中央の要素が特定値より大きければ比較範囲の先頭から中央までの要素
- 配列の中央の要素が特定値より小さければ比較範囲の中央から末尾までの要素
※配列の要素数が偶数個のときは中央の要素2つのうち1つ目を中央とする
計算対象選別
判定 | 計算対象 | 関係 | 数値 |
---|---|---|---|
○ | データの比較回数 | ≧ | 1 |
データの交換回数 | = | 0 | |
関数の呼び出し回数 | = | 0 |
変数定義
変数にする対象 | 変数 | 関係 | 数値 |
---|---|---|---|
配列の最大要素数 | > | 1 |
一般化
最善の計算量
最善の計算量となるのは
配列の中央の要素が特定値のときである
このときのデータの比較回数すなわち計算量は
漸近計算量は
最悪の計算量
最悪の計算量となるのは
要素が最後のひとつになるまで分割が必要なときである
この比較回数は最初の1回に要素の分割回数を足したものである
よって計算量は
漸近計算量は
確かめ算
推移 | ||
---|---|---|
2 | 2 |
|
4 | 3 |
|
8 | 4 |
|
16 | 5 |
|
平均の計算量
配列の要素がn個の比較回数一覧
配列の最大要素数が16~31のとき
計算量は1から5までのいずれかの5通りである
よって自然数1~5の平均値が平均の計算量である
この場合の中央値を求めるには範囲の先頭と末尾の数値を足して半分にする
第一項が最善の計算量で第二項が最悪の計算量となっているので
↓
漸近計算量は
確かめ算
2 | 1.5 |
4 | 2 |
8 | 2.5 |
16 | 3 |
Discussion