本文へ移動

基本情報技術者試験 · 学習ガイド

アルゴリズム

アルゴリズムとは

アルゴリズムとは、問題を解くための手順であり、整列の有無など前提によって適した方法が変わります。

エルくんが説明する図解。7個の整列数から7を比較し右3個へ絞り11に到達する図。
考え方の例:1、3、5、7、9、11、13から11を探すと、中央7より大きいので右半分へ進み、9、11、13の中央11で一致します。

大量の番号から目的の番号を探すとき、毎回すべてを読む必要があるでしょうか。整列済みなら、中央との比較で候補を半分にできます。

基本の仕組み

基本の仕組みの図解。整列した「1、3、5、7、9、11、13」を横一列に置き、中央の7と探す値11を比較する。7より大きいので左側を薄くし、右半分の9・11・13を枠で囲み、その中央の11へ矢印をつないで一致を示す。
覚えること:整列時、中央より大なら右半分へ

1、3、5、7、9、11、13から11を探すと、中央7より大きいので右半分へ進み、9、11、13の中央11で一致します。

二分探索は整列を前提とし、比較のたびに下限または上限を更新します。候補を約半分にするため、探索の比較回数は要素数nに対しておおむねlog₂nの規模です。最大比較回数は⌊log₂n⌋+1回(⌊ ⌋は小数点以下切捨て)で、16個なら5回です。

未整列の配列では、中央より大きい値が左にもあるため半分を捨てられません。添字の更新を誤ると同じ範囲を繰り返して終了しない場合があります。

探索方法の前提

探索方法の前提の図解。中央に小さい順に並ぶ項目列を置き、その上に候補範囲を示す枠を描く。エルくんが下限を右へ動かす前の位置を点線、動かした後を実線で示し、上限は固定して候補範囲が縮む様子を一つの列で表す。
覚えること:二分探索は整列済みで、範囲縮小を確認

線形探索は未整列でも使えます。n個から探すと比較回数は最悪n回、見つかる場合の平均は(n+1)/2回で、計算量はO(n)です。二分探索は整列済みを前提にO(log n)です。二分探索では、下限・上限の更新後も候補範囲が必ず縮むかを確かめます。

ハッシュ探索は、キーから計算した位置(ハッシュ値)を直接調べます。異なるキーが同じ位置になる衝突が少なければ平均O(1)ですが、衝突が多いと比較回数が増えます。

探索方法の前提
探索必要な前提比較回数の目安
線形整列不要平均(n+1)/2回、最悪n回
二分整列済み最大⌊log₂n⌋+1回
ハッシュキーの変換と衝突処理衝突がなければ1回

試験に出る

  • 二分探索は整列済みが前提という条件。
  • 比較のたびに下限・上限を更新し、候補が約半分になること。
  • 探索の比較回数が要素数nに対しておおむねlog₂n、最大は⌊log₂n⌋+1回であること。線形探索の平均(n+1)/2回との比較。
  • 未整列では中央で半分を捨てられないこと。
  • 添字更新を誤ると終了しない場合があること。

重要な言葉

二分探索
整列済みのデータで中央と比較し、候補を半分に絞る探索。
計算量
処理に必要な手間を要素数との関係で表した量。
線形探索
先頭から順に比較して目的の値を探す方法。

確認問題

確かめよう候補が16個なら、半分に4回絞ると何個?

1個。16→8→4→2→1です。

二分探索は、データが未整列でも使える。

候補が16個のとき、半分に絞る操作を4回行うと1個になる。

二分探索が前提とする条件は?

候補16個を半分に絞る操作を繰り返すと、1個になるまで何回?

大量の番号から目的の番号を探すとき、毎回すべてを読む必要があるでしょうか。なら、中央との比較で候補をにできます。

1、3、5、7、9、11、13から11を探すと、より大きいのでへ進み、9、11、13の中央11で一致します。

は整列を前提とし、比較のたびに下限または上限を更新します。候補を約半分にするため、探索の比較回数は要素数nに対しておおむねの規模です。最大比較回数は⌊log₂n⌋+1回(⌊ ⌋は小数点以下切捨て)で、16個なら5回です。

の配列では、中央より大きい値が左にもあるため半分を捨てられません。の更新を誤ると同じ範囲を繰り返して終了しない場合があります。

出典・参考資料

試験の公式案内と、この記事の参考にした学習資料です。

編集:Pinternet Works · 更新日:

教材の編集方針・訂正について