2分探索の不具合と無限ループ【基本情報技術者試験 科目B サンプル問題】

(令和4年度12月公開) 基本情報技術者試験 サンプル問題 科目B 問13のブログのアイキャッチ画像 科目B 公開問題
広告

← 科目Bの公開問題一覧へ戻る

 基本情報技術者試験の科目Bのサンプル問題を題材に,2分探索による検索処理について学習します。この問題では,2分探索のプログラムにある不具合によって,探索範囲が狭まらず無限ループになる場合を確認します。

広告

(令和4年度12月公開) 基本情報技術者試験 サンプル問題 科目B 問13

 次の記述中の       に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。

 関数 search は,引数 data で指定された配列に,引数 target で指定された値が含まれていればその要素番号を返し,含まれていなければ -1 を返す。data は昇順に整列されており,値に重複はない。

 関数 search には不具合がある。例えば,data の       場合は,無限ループになる。

〔プログラム〕

○整数型: search(整数型の配列: data,整数型: target)

 整数型: low,high,middle

 low ← 1

 high ← dataの要素数

 while (low ≦ high)

  middle ← (low + high) ÷ 2 の商

  if (data[middle] < target)

   low ← middle

  elseif (data[middle] > target)

   high ← middle

  else

   return middle

  endif

 endwhile

 return -1

解答群

ア 要素数が1で,targetがその要素の値と等しい

イ 要素数が2で,targetがdataの先頭要素の値と等しい

ウ 要素数が2で,targetがdataの末尾要素の値と等しい

エ 要素に-1が含まれている

【解答】

【解説】

search は,整列済みの配列を2分探索する処理である。ただし,data[middle] < target の場合に low ← middle としているため,探索範囲が狭まらない場合がある。例えば,要素数が2で,target が data の末尾要素の値と等しい場合を考える。low = 1,high = 2 なので,middle = (1 + 2) ÷ 2の商=1 となる。data[1] < target なので,low ← middle が実行されるが,middle が1なので,low は1のままで変化しない。その結果,low = 1,high = 2 の状態が繰り返され,middle も1のまま変化しない。したがって,探索範囲が狭まらず,whileの条件 low ≦ high が常に真となるため,無限ループになる。

※ このような無限ループを防ぐには,探索範囲が必ず狭くなるように low や high の値を更新する必要がある。例えば,data[middle] < target の場合は,middle 自身は既に調べているので,low ← middle + 1 とすれば,探索範囲を確実に狭めることができる。

【参考】

「(令和4年度12月公開) 基本情報技術者試験 サンプル問題 科目B 問13」の解答画像

この問題のポイント

 この問題から学べることは,

  • 2分探索による検索方法
  • 探索範囲をlowとhighで管理する方法
  • 整数の割り算の商を使ってmiddleを求める方法
  • 探索範囲が狭まらないことによって無限ループになる場合
  • プログラムの不具合をトレースによって確認する方法

です。特に,2分探索では,条件に応じて low や high を更新し,探索範囲を必ず狭めていくことが重要です。値を更新しているように見えても,実際には同じ値のままになっていないか,トレースして確認しましょう。

基本情報技術者試験の学習におすすめの参考書

基本情報技術者試験の合格を目指す方におすすめの参考書です。

令和08年 イメージ&クレバー方式でよくわかる かやのき先生の基本情報技術者教室
基礎理論からコンピュータ・ネットワーク・データベースまで、基本情報技術者試験の全範囲をわかりやすく学べる定番テキストです。図解が豊富で、初学者にもおすすめです。

キタミ式イラストIT塾 基本情報技術者 令和08年
イラストを使った解説が特徴の人気参考書です。基礎理論の考え方や計算問題もイメージで理解しやすく、独学学習との相性が良い一冊です。

令和08年 基本情報技術者 合格教本
試験範囲を体系的に学習したい方におすすめの教科書です。基礎理論の各テーマも丁寧に解説されており、理解を深めながら学習を進められます。

学習のお役に立ちましたら

この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。

よろしければ、このサイトを応援いただけますと嬉しいです。

※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。

広告