昇順に整列済みの配列要素A(1),A(2),…,A(n)から,A(m)=kとなる配列要素A(m)の添字mを2分探索法によって見つける処理を図に示す。
終了時点でm=0である場合は,A(m)=kとなる要素は存在しない。
図中のaに入る式はどれか。
ここで,“/”は,小数点以下を切り捨てる除算を表す。
正答2
解説
正解は2です。
図は2分探索の流れ図です。
まずxに1、yにnを代入し、x>yになれば0をmに入れて終了します。
x≦yのときに空欄aを実行し、kとA(m)を比較します。
kが小さければm−1をyに、大きければm+1をxに入れ、等しければ終了します。
したがってaでは、探索範囲xからyの中央の添字mを求める必要があります。
【選択肢別解説】
1:× (x+y)はxとyの和で、中央の2倍になります。
配列の範囲を超えてしまいます。
2:○ (x+y)/2はxとyの中間の添字です。
小数点以下を切り捨てるので、必ずx以上y以下の整数になります。
3:× x≦yなのでx−yは0以下になり、mが0や負の値になってしまいます。
4:× (y−x)/2は範囲の幅の半分です。
起点のxを足していないので、範囲外の添字を指すことがあります。
例えばx=5、y=9なら2となり、範囲の外です。
【ポイント】
2分探索では中央の位置を(下限+上限)÷2で求めます。
比較結果に応じて上限をm−1、下限をm+1に更新し、範囲を半分ずつ狭めます。