科目Bのアルゴリズムは、自分で書くのではなく、書かれたものを読んで答える問題です。だから必要なのは「思いつく力」ではありません。目の前のプログラムが何をしているかを、確実に言い当てる力です。このページで出題範囲を試験要綱とシラバスで確かめ、26回をどの順に読むかまで決めておきます。手当たり次第に始めると、前の回を使う回に先に当たって、そこで止まります。
いまだけ無料PR|Udemy の講座擬似言語が読めずに止まるなら1行ずつ値を追う「科目B 基礎講義」0円書く力ではなく、読む力が問われる
アルゴリズムと聞くと「自分でソートを思いつけないと駄目なのか」と身構えますが、科目Bで問われるのはそこではありません。出題はいつもプログラムが先にあって、空欄が数か所ある形か、実行結果を答える形です。
やることは、いつも同じ3つ
① 問題文が「何をする関数か」を必ず教えてくれるので、まずそこを読む。② 変数の値を1行ずつ書き出す(トレース)。③ 空欄に選択肢を入れて、①と食い違わないものを選ぶ。
アルゴリズムの名前を知っていると②が速くなる ── これが「アルゴリズムを勉強する」ことの実際の効き方です。知らなくても解けますが、時間が足りなくなります。
アルゴリズムの前に、プログラムそのものが読めなければ何も始まりません。配列の先頭が [1] であること(科目Bの問題文は、配列を使うたびに「配列の要素番号は1から始まる」と断ります)、← が代入であること、while がいつ終わるか ── ここが曖昧なままアルゴリズムに進むと、「アルゴリズムが難しい」ではなく「文法が読めていない」だけの状態になります。
まだ不安があれば、先に 擬似言語の読み方 を通してください。
科目Bに出るアルゴリズムの地図
出題範囲は試験要綱に、その中身はシラバスに書かれています。まず要綱の原文です。
出典:試験要綱 Ver5.6 科目B 出題範囲
2 プログラムの処理の基本要素に関すること
型,変数,配列,代入,算術演算,比較演算,論理演算,選択処理,繰返し処理,手続・関数の呼出し など
3 データ構造及びアルゴリズムに関すること
再帰,スタック,キュー,木構造,グラフ,連結リスト,整列,文字列処理 など
配列は2番の「基本要素」に、残りの多くは3番に入っています(探索は要綱の3番には無く、シラバスの「整列・併合・探索のアルゴリズム」から加えています)。この2つを、シラバスの分類にそろえて整理すると、「データ構造」と「アルゴリズム」の2つに分かれます。
| 何か | 出題での見え方 | |
|---|---|---|
| 配列 | 番号で場所を指すデータ構造 | いちばんよく出る。入替え・逆順・シフト・集計・最大最小 |
| リスト | 「次はどれか」を持たせてつなぐデータ構造 | 要素の挿入・削除でつなぎ替えが起きる |
| スタック・キュー | 出し入れの順番が決まっているデータ構造 | 後入れ先出し(スタック)と先入れ先出し(キュー)の対比 |
| 木構造 | 枝分かれしてつながるデータ構造 | たどる順番(先行順・後行順・中間順) |
| グラフ | 点と点が自由につながるデータ構造 | 頂点と辺を表(隣接行列)で表す・つながりをたどる |
| 整列 | 並べ替える手順 | 途中の状態を答えさせる(何周目で配列がどうなるか) |
| 探索 | 目当てのものを見つける手順 | 比較回数、見つからなかったときの動き |
| 再帰 | 自分自身を呼び出す手順 | どこまで潜って、どう戻ってくるか |
| 文字列処理 | 文字を1つずつ見ていく手順 | 照合・置換・数え上げ |
要綱には4番目の項目として、「数理・データサイエンス・AI などの分野を題材としたプログラム」があります。何を指すのか要綱だけでは分かりませんが、シラバスの「自然言語処理のアルゴリズム」(形態素解析・n-gram・文章間類似度など)がその中身にあたります。
身構える必要はありません。題材がAIなだけで、やっていることは配列の集計です。A14 で扱います。
第2部 定番処理の型(全26回)
むずかしい順ではなく、あとの回が前の回を使う順に並べています。上から順に読んでください。1回に1つずつ、擬似言語での書かれ方と、1行ずつ動かせるトレースが付きます。
先に実物を1問見てみる
ハッシュ表探索(A7-2)にあたる出題は、すでに解説してあります。値から格納位置を計算して、そこに格納するという、探索アルゴリズムの入口です。
次に読む
この記事で引用した資料
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。

