複雑アルゴリズムの擬似言語読解とは(全体像)
これは、複雑なアルゴリズムを擬似言語で書いたコードを読み、その動きや結果を答える問題のこと。科目Bでいちばん多く出るタイプだ。
大事なのは、「知っている」だけでは解けないこと。たとえばバブルソートを言葉で知っていても、コードを手で追って(トレースして)最後の状態を出せなければ得点にならない。つまり、暗記ではなく追う技能が問われる。
よく出るアルゴリズムは、これまで学んだものばかり。
- ソート(バブル・選択・挿入・クイック・マージ)
- 探索(2分探索・BFS・DFS)
- 動的計画法(フィボナッチなど)
- データ構造の操作(スタック・キュー・木・ハッシュ表)
詳しく:出題パターンとトレース技能だけ覚えれば戦える
ここが記事の心臓部。まずは出題パターン4つ。
出題パターン4つ
| パターン | 問われること |
|---|---|
| 穴埋め | コードの空欄に入る正しい式を選ぶ |
| 実行結果の予測 | ある入力で、最後にどんな出力になるか |
| 計算量の判定 | O(n)か、O(n log n)か、O(n²)か |
| バグ発見 | コードのどこに誤りがあるか |
どのパターンでも土台になるのが、次の読解技能だ。
読解の技能3つ
| 技能 | やること |
|---|---|
| トレース実行 | 1行ずつ追って、処理を手で再現する |
| 変数の追跡 | 紙に変数の値の移り変わりを表で書く |
| 不変条件を見抜く | ループ中つねに成り立つ性質に気づく |
いちばん大事なのがトレース実行。頭の中だけで追うと間違えやすいので、紙に変数の値を書き出して、1行ごとに更新するのが確実だ。
そして見落としがちなのが時間配分。1問に時間をかけすぎると最後まで解ききれない。1問あたり5〜10分を目安に、難しい問題は後回しにする戦略が効く(問題数や時間は受験年度の最新案内で確認するとよい)。
わかりやすく言い換えると
要するに、擬似言語読解は「料理のレシピを手で再現して、できあがりを当てる」ことだ。
①トレース実行 … レシピを1工程ずつ実際に追う(材料を入れて、混ぜて…)
②変数の追跡 … 鍋の中身(変数の値)が各工程でどう変わるかをメモする
③不変条件 … 「ずっと弱火を保つ」のような、最後まで変わらないルールに気づく
知っているだけ(レシピを眺めるだけ)では作れない。手を動かして1工程ずつ追うから、できあがり(最後の答え)が分かる、というわけだね。
試験のツボ
🔴 一番出る:トレース実行が土台
①コードを手で1行ずつ追って処理を再現する
②紙に変数の値を書き出し、1行ごとに更新する
🔴 次に出る:出題パターン4つ
①穴埋め/実行結果の予測
②計算量の判定/バグ発見
🟡 押さえると安定:時間配分
①1問あたり5〜10分が目安
②難しい問題は後回しにして、解ける問題から進める
よくある間違い
①「アルゴリズムを知っていれば、手で追わなくても解ける」→ ✗ 知識だけでは不十分。手で1行ずつ追うトレース実行の技能が必要。
②「時間は気にせず、1問にいくらでもかけてよい」→ ✗ 1問5〜10分が目安。かけすぎると最後まで解ききれない。
③「トレースは頭の中だけで十分で、紙に書く必要はない」→ ✗ 頭の中だけだと間違えやすい。紙に変数の値を書き出すのが確実。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(解くための技能)
擬似言語読解を解くための技能に関する次の記述のうち、正しいものはどれか。
- アルゴリズムの名前を暗記していれば、コードを追わなくても必ず解ける
- コードは眺めるだけでよく、変数の値を書き出す必要はないものである
- 出力だけを見て答えるので、途中の処理を追うことは不要なものである
- コードを手で1行ずつ追うトレース実行で、変数の値を書き出して解く
解答は 4 だよ。
擬似言語読解はコードを手で1行ずつ追うトレース実行が土台で、変数の値を紙に書き出して追うのが確実なんだ。暗記だけでは解けないよ。
選択肢1は「暗記だけで解ける」が誤り。選択肢2は「書き出す必要はない」が誤り。選択肢3は「途中を追わない」が誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 暗記だけでは解けない |
| 2 | ✗ | 変数の値を書き出すのが確実 |
| 3 | ✗ | 途中の処理を追う必要がある |
| 4 | ✓ | トレース実行で変数を追って解く |
オリジナル問題2(出題パターン)
擬似言語読解の出題パターンに関する次の記述のうち、正しいものはどれか。
- 出題は計算問題だけで、コードの空欄や実行結果を問うことはないとされる
- 穴埋め・実行結果の予測・計算量の判定・バグ発見などが出題される
- 出題はバグ発見だけに限られ、ほかのパターンは出ないものとされている
- 出題は暗記の知識を問うだけで、コードを読むパターンは存在しない
解答は 2 だよ。
出題は穴埋め・実行結果の予測・計算量の判定・バグ発見など、いくつかのパターンがあるんだ。どれもトレース実行が土台になるよ。
選択肢1は「計算問題だけ」が誤り。選択肢3は「バグ発見だけ」が誤り。選択肢4は「コードを読まない」が誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 空欄や実行結果も問われる |
| 2 | ✓ | 穴埋め・実行結果・計算量・バグ発見 |
| 3 | ✗ | バグ発見だけではない |
| 4 | ✗ | コードを読むパターンが中心 |
オリジナル問題3(時間配分)
擬似言語読解の時間配分に関する次の記述のうち、正しいものはどれか。
- 1問につき時間は無制限なので、1問だけにすべての時間をかけてよい
- 難しい問題から必ず解き始め、簡単な問題は最後に回すのがよいとされる
- 1問5〜10分を目安にし、難しい問題は後回しにして解ける問題から進める
- すべての問題に同じ秒数だけかけ、難易度で時間を変えてはいけないとされる
解答は 3 だよ。
1問5〜10分を目安にし、難しい問題は後回しにして解ける問題から進めるのが効くんだ。1問にかけすぎると最後まで解ききれないからね。
選択肢1は「時間無制限」が誤り。選択肢2は「難しい問題から」が逆。選択肢4は「同じ秒数で固定」が誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 時間は限られている |
| 2 | ✗ | 解ける問題から進めるのがよい |
| 3 | ✓ | 1問5〜10分・難問は後回し |
| 4 | ✗ | 難易度に応じて配分する |
まとめ
押さえどころ
- 🔴 トレース実行 = コードを手で1行ずつ追い、変数の値を紙に書き出して更新する。暗記では解けない。
- 🔴 出題パターン = 穴埋め・実行結果の予測・計算量の判定・バグ発見。
- 🟡 時間配分 = 1問5〜10分が目安。難しい問題は後回しにして解ける問題から進める。
次に学ぶ
- IPA擬似言語構文 ── 読み解くための基本記法(`←`代入・1始まり配列)。記法に慣れると読解が速くなる。
- 擬似言語の再帰 ── 読解で頻出する再帰のトレースのしかた。複雑なコードを追う練習になる。
執筆: SikakuQuest編集部