IPA アルゴリズム — 頻出論点と過去問

この分野の学び方

1. この分野の全体像

アルゴリズムは、データの持ち方と処理の手順を組み立て、それをプログラムとして書き表して読み解くための技術の集まりです。たどる対象は、ITパスポートでは擬似言語のプログラムや表計算の式、応用情報技術者の午前ではデータ構造の操作や比較回数・計算量の式で、高度試験の午前IIになるとデータベースや設計の区分に合わせた題材に移ります。データの並べ方や格納の仕組みの上に探索や整列の手法が組み立てられ、それらを具体的なコードや流れ図として追跡する技術と、記述に用いる言語やパラダイムの仕様が結びついています。

2. 配下の論点の案内

  • データ構造: 「整列・探索・計算量」の手順が前提にするのは、この論点で学ぶデータの置き方とつなぎ方です。応用情報技術者の午前やデータベーススペシャリストの午前IIでは、スタックから取り出せる順序の数え上げ、2分探索木やB+木の再構成、配列で表したリストの操作、ハッシュ関数で衝突が起きる条件を求める問題が出ています。

  • 整列・探索・計算量: 「データ構造」の上に立ち、線形探索や2分探索のような手順の手間を、オーダーや平均回数という物差しで比べます。応用情報技術者の午前では途中の並びや流れ図から整列の方式を見分ける問題や、探索の平均比較回数・二分法の反復回数・再帰的な定義を選ぶ問題が出題されています。

  • 擬似言語・プログラム読解: 知識を問うほかの論点と違い、示されたプログラムや表計算の式をその場で動かして答えを出す形です。ITパスポートでは配列操作や数値判定のプログラム、相対参照・絶対参照や条件分岐を含むワークシートの式を読み解く問題が中心です。

  • プログラム言語・パラダイム: 書かれたプログラムを読む力ではなく、言語やパラダイムの性質をどれだけ知っているかで答えが決まります。応用情報技術者の午前では言語やデータ形式の特徴から名前を当てる問題があって、システムアーキテクトの午前IIではオブジェクト指向や関数型などのパラダイムの性質と、引数の渡し方が問われています。

3. 学習の順序の提案

「擬似言語・プログラム読解」で身につけるたどり方は、ほかの論点で手順や再帰の動きを確かめるときにも同じように使います。「データ構造」は、木や配列を使う「整列・探索・計算量」の手順と比較回数の式の前提になるので、その次に置きます。「プログラム言語・パラダイム」はほかの論点の前提を要しない知識の論点で、受ける区分の出題に合わせて学ぶ時期を決められます。

受ける区分 先に学ぶ論点 次に学ぶ論点
ITパスポート 擬似言語・プログラム読解 データ構造、整列・探索・計算量、プログラム言語・パラダイムの基本用語
応用情報技術者 / 高度試験の午前I データ構造、整列・探索・計算量 プログラム言語・パラダイム、擬似言語・プログラム読解(流れ図の条件比較)
高度試験の午前II 区分に対応する論点(データベーススペシャリストはデータ構造と整列・探索・計算量、システムアーキテクトはプログラム言語・パラダイム、エンベデッドシステムスペシャリストはプログラム言語・パラダイムとデータ構造) 左記の前提となる2分木・ハッシュ・スタックの基礎

応用情報技術者の午後では、グラフの最短経路や、動的計画法で求める最長共通部分列、パズルや迷路を解く探索、整数を扱う計算を題材に、プログラムの空欄や行の実行回数を答える大問が出ています。この大問を選ぶなら、「データ構造」と「整列・探索・計算量」で木や再帰、探索の考え方を固めてから、「擬似言語・プログラム読解」のたどり方で長い仕様とプログラムを突き合わせる順になります。情報処理安全確保支援士の午後Iにも、Webアプリケーションのプログラムを解析ツールやテストで調べる場面を題材に、指摘された行や変数をプログラムの中から読み取らせる大問があります。

4. 分野をまたいで間違えやすいところ

並べ替えの手順が流れ図や擬似言語で示された問題でも、どの整列法かや比較の回数を答えさせるなら「整列・探索・計算量」、示された時点の変数や配列の値を答えさせるなら「擬似言語・プログラム読解」の問題です。前者は手順の名前と性質を知っていれば選択肢を絞れますが、後者は整列法の名前が分かっても答えには近づきません。

スタックの後入れ先出しを問う問題と、関数の呼出しで積まれるスタックフレームの量を見積もる問題は、同じスタックでも見るものが違います。前者は「データ構造」で、積む順と取り出す順の組合せを数える問題です。後者は「プログラム言語・パラダイム」にも、システム開発技術の分野にも入る問題で、1つ1つの値ではなく関数ごとのまとまりを単位に考えます。

B+木インデックスのノードの分割やアクセス回数のオーダー、入れ子ループ法による結合の計算量を問う問題は、アルゴリズムの「データ構造」や「整列・探索・計算量」でも、データベースの分野の「インデックス・物理設計」でも学ぶ問題です。アルゴリズムの側からは手順の手間の見積もりとして、データベースの側からは索引や結合方式の選び方として、同じ問題に関わります。

プリンタへの印刷データの割当てや、媒体へのファイル領域の割当てを決められた規則どおりに試す問題は、アルゴリズムの分野とOS・ソフトウェアの分野の両方に入っているものの、アルゴリズムの側ではどの論点にも入りません。同じ割当ての話でも、空き領域を管理するデータ構造の速さを比べる問題は「データ構造」の問題で、規則を最後まで試して結果を出す問題とは問われているものが違います。

アルゴリズムの論点別の過去問

データ構造26問 整列・探索・計算量19問 擬似言語・プログラム読解18問 プログラム言語・パラダイム15問

アルゴリズムの理解度チェック

アルゴリズムの過去問一覧

この分野の午後問題(記述式・読み物)

アルゴリズムの用語

テクノロジのほかの分野

基礎理論70問 ハードウェア184問 システム構成154問 OS・ソフトウェア106問 データベース257問 ネットワーク405問 セキュリティ技術562問 セキュリティ管理165問 システム開発技術253問 開発プロセス126問 組込み・IoT146問 AI・データ活用118問 クラウド・仮想化66問 インタフェース・メディア65問 データマネジメント7問