基本情報技術者「アルゴリズム・プログラミング」の出題ポイント解説
基本情報技術者試験(FE)のアルゴリズム・プログラミングは科目Bの中心分野(16問)。擬似言語のトレース力と典型アルゴリズムの理解が合否を分けます。本記事ではアルゴリズム・プログラミングの頻出論点を整理します。
この章の重要度
科目B(20問・100分)のうち16問(80%)がアルゴリズム・プログラミング。科目A・Bとも60%以上で合格なので、科目Bで確実に得点する必要があります。擬似言語のトレース練習が最優先の対策です。
頻出トピック一覧
1. 擬似言語の文法
IPA規定の擬似言語:変数宣言(整数型 x)、代入(x ← 1)、条件分岐(if-else)、繰返し(while・for)、関数定義・配列(要素[0]または[1]から開始:問題で指定)、論理演算(and・or・not)。まず文法を完全に覚えることが出発点。
2. 配列・文字列の操作
配列の走査(線形探索)、最大値・最小値・合計・平均の計算、配列の逆順化、文字列の部分一致、2次元配列の走査(行優先・列優先)。インデックスの範囲(0開始/1開始)に要注意。
3. 基本データ構造(スタック・キュー)
スタック(LIFO:Last In First Out):push(追加)・pop(取り出し)・peek(参照)。関数呼び出し・逆ポーランド記法で使用。キュー(FIFO:First In First Out):enqueue・dequeue。印刷ジョブ・プロセスキューで使用。
4. リスト・木構造
連結リスト(単方向・双方向・循環):挿入・削除がO(1)、探索はO(n)。二分木・二分探索木:左子<親<右子、探索・挿入O(log n)平均。木の走査:前順・中順・後順・レベル順(幅優先)。ヒープ(優先度付きキュー)。
5. 探索アルゴリズム
線形探索:O(n)、ソート不要。二分探索:O(log n)、ソート済み配列必須、中央値と比較して範囲を半分ずつ絞る。ハッシュ法:O(1)平均、ハッシュ関数と衝突処理(チェイン法・オープンアドレス法)。
6. ソートアルゴリズム
O(n²)系:バブルソート(隣接交換)・選択ソート(最小値選択)・挿入ソート(既ソート部に挿入)。O(n log n)系:マージソート(分割統治)・ヒープソート(ヒープ化)・クイックソート(ピボット分割・平均O(n log n)・最悪O(n²))。安定ソート:バブル・挿入・マージ、不安定:選択・クイック・ヒープ。
7. 再帰アルゴリズム
再帰関数の定義と実行:ベースケース(終了条件)+再帰ステップ。典型例:階乗・フィボナッチ・ハノイの塔・木の走査・マージソート・クイックソート。動的計画法(メモ化再帰)。
8. プログラミングの基礎(関数・スコープ)
関数:引数・戻り値・ローカル変数・グローバル変数。値渡し・参照渡し(配列は参照渡しが多い)。スコープ:変数の有効範囲。オブジェクト指向:クラス・インスタンス・継承・カプセル化・ポリモーフィズム(科目Bでは登場しない場合も)。
覚え方のコツ
アルゴリズム対策は「擬似言語のトレース練習」が全ての土台。問題を見たら紙に変数・配列の値を書き出し、1行ずつステップ実行する習慣をつけます。最初はバブルソート・線形探索など簡単なアルゴリズムから始め、徐々に再帰・木の走査へと難易度を上げます。典型アルゴリズムを7〜10個(線形/二分探索・バブル/挿入/クイック/マージソート・スタック/キュー操作・再帰)完全暗記すれば、応用問題にも対応可能。計算量(Big-O記法)を各アルゴリズムごとに暗記。科目Bのサンプル問題・公開問題は全問完璧に解けるまで繰り返す。1問15分以内で解くスピードも意識。擬似言語に慣れるため、同じアルゴリズムをPythonやC言語でも書いてみると理解が深まります。
よくあるひっかけ
アルゴリズム・プログラミングの頻出ひっかけ。①配列のインデックス開始:問題により0開始か1開始かが違う、宣言部・コメントで必ず確認。②ループの条件:while (i < n) と while (i <= n) で1回分の差、境界値でミスしやすい。③スタックとキュー:スタックはLIFO(後入れ先出し)、キューはFIFO(先入れ先出し)、混同注意。④二分探索の前提:ソート済み配列が必須、未ソートでは使えない。⑤クイックソートの最悪ケース:ピボット選択が悪いと O(n²) に悪化、平均は O(n log n)。⑥ソートの安定性:等しい要素の順序が保たれるのが安定ソート、バブル・挿入・マージは安定。⑦再帰のベースケース:終了条件がないと無限再帰、スタックオーバーフロー。⑧値渡しと参照渡し:値渡しは元の変数が変わらない、参照渡し(配列等)は関数内の変更が元に反映。⑨計算量の比較:O(1)<O(log n)<O(n)<O(n log n)<O(n²)<O(2^n) の順で増大。
基本情報技術者 アルゴリズム・プログラミング 章別クイズ →