バイナリーサーチ(2分探索)は、ソートされた配列から特定の値を効率的に見つけるためのアルゴリズムです。このブログでは、バイナリーサーチの実装方法を具体的に説明し、実際に数字を入力したときの動作も解説します。
実装例
以下は、Rubyでのバイナリーサーチの実装例です。このコードは、ユーザーが入力した数字が配列内に存在するかどうかを確認し、存在する場合はそのインデックスを返します。
コードの解説
-
関数定義:
def binary_search(array, right, target)
array
: 検索対象のソートされた配列right
: 配列の右端のインデックスtarget
: 検索する値
-
初期設定:
left = 0
left
を配列の左端のインデックスである0に設定します。
-
ループ処理:
while left <= right
left
がright
以下である限り、ループを繰り返します。
-
中央インデックスの計算:
center = (left + right) / 2
center
をleft
とright
の平均値として計算します。
-
値の比較:
array[center]
がtarget
と一致する場合、center
を返します。array[center]
がtarget
より小さい場合、検索範囲を右側に絞り、left
を更新します。array[center]
がtarget
より大きい場合、検索範囲を左側に絞り、right
を更新します。
-
値が見つからない場合:
return -1
- ループが終了するまでに値が見つからなかった場合、
-1
を返します。
- ループが終了するまでに値が見つからなかった場合、
実際の動作例
以下に、具体的な数字を入力した場合の動きを示します。
例1: 配列内に数字が存在する場合
- 入力: 5
- 動作:
left
= 0,right
= 9center
= (0 + 9) / 2 = 4array[4]
= 9(検索対象より大きいので、右端を更新)right
= 4 - 1 = 3center
= (0 + 3) / 2 = 1array[1]
= 3(検索対象より小さいので、左端を更新)left
= 1 + 1 = 2center
= (2 + 3) / 2 = 2array[2]
= 5(検索対象と一致)
- 出力:
5は配列の2番目に存在します
例2: 配列内に数字が存在しない場合
- 入力: 7
- 動作:
left
= 0,right
= 9center
= (0 + 9) / 2 = 4array[4]
= 9(検索対象より大きいので、右端を更新)right
= 4 - 1 = 3center
= (0 + 3) / 2 = 1array[1]
= 3(検索対象より小さいので、左端を更新)left
= 1 + 1 = 2center
= (2 + 3) / 2 = 2array[2]
= 5(検索対象より小さいので、左端を更新)left
= 2 + 1 = 3center
= (3 + 3) / 2 = 3array[3]
= 6(検索対象より小さいので、左端を更新)left
= 3 + 1 = 4(ループ終了)
- 出力:
7は配列内に存在しません
結論
バイナリーサーチは、ソートされた配列内で特定の値を効率的に検索するための強力なアルゴリズムです。このブログでは、具体的な実装方法と、実際の入力に対する動作例を示しました。これらの例を参考に、自分のプロジェクトに応用してみてください。