ITパスポート過去問道場Pro

💻 アルゴリズムとプログラミング

アルゴリズムとプログラミングの要点整理

本分野はITパスポート試験シラバスのテクノロジ系・大分類7「基礎理論」の中分類14に当たり、小分類は「36 データ構造」「37 アルゴリズムとプログラミング」「38 プログラム言語」「39 その他の言語」の4つで構成される。シラバス改訂「iパス6.0」(Ver.6.0、2021年10月公表)により、2022年4月(令和4年4月)の試験から、特定のプログラム言語に依存しない擬似言語でプログラミング的思考力を問う問題の出題が始まった。

アルゴリズムの基本構造(基本制御構造)は「順次」「選択」「繰返し」の3つで、表現方法には流れ図(フローチャート)と擬似言語がある。流れ図の記号はJIS X 0121で規定され、ひし形は「判断」(条件による分岐)、長方形は「処理」を表す。データ構造の用語例はリスト、キュー、スタック、木構造、2分木。スタックは後入れ先出し(LIFO)でデータの格納をプッシュ(push)、取出しをポップ(pop)と呼び、キューは先入れ先出し(FIFO)で最初に格納したデータから順に取り出される。この対比は頻出である。

シラバスが代表的なアルゴリズムとして明記するのは、探索(線形探索法・2分探索法)、整列(選択ソート・バブルソート・クイックソート)、併合(マージ)。線形探索法は先頭から順に比較するため平均比較回数は約(n+1)/2回・最大n回。2分探索法は整列済みのデータ列が前提で、比較のたびに探索範囲が半分に絞られるため最大でも約log2(n)回(n=1,000件なら約10回)で済む。バブルソートは隣り合う要素の比較・交換を繰り返す方法で、比較回数はn(n−1)/2回(オーダはO(n^2))。クイックソートは基準値(ピボット)より小さい組と大きい組への分割を再帰的に繰り返す整列法(C.A.R.ホーア考案)で、平均計算量はO(n log n)である。

擬似言語の読解では、IPA公式の記述形式を確実に押さえたい。

関数・手続は引数を受け取り、処理結果を戻り値として返す。IPA公開の擬似言語サンプル問題の問1は、配列dataArrayの要素の平均を返す関数calcMean(宣言は「○実数型: calcMean(実数型の配列: dataArray)」)の穴埋めで、正解は「ア」——sumに要素dataArray[i]を順次加算して合計を求め、合計を要素数で割るという定石の流れである。変数の値を1行ずつトレースする練習が読解力に直結する。

言語の知識も出題される。シラバスの「プログラム言語」の用語例はC、Fortran、Java、C++、Python、JavaScript、R。「その他の言語」ではマークアップ言語のHTML(Hyper Text Markup Language)・XML(Extensible Markup Language)・タグ・SGMLが用語例に挙がり、異なるプログラム言語間のデータのやり取りに用いる言語としてJSON(JavaScript Object Notation)が明記されている。CSVのような単純な表形式のデータ形式との用途の違いも整理しておこう。

本番形式の問題を無料で演習

例題 (35)

1. スタックというデータ構造の特徴として、最も適切なものはどれか。

  1. 最初に格納したデータを最初に取り出す先入れ先出し(FIFO)である。
  2. 格納した順序とは無関係に、任意のデータを直接取り出せる。
  3. 最後に格納したデータを最初に取り出す後入れ先出し(LIFO)である。
  4. 常に値の小さいデータから順に取り出される。

スタックは後入れ先出し(LIFO:Last In First Out)で、最後に格納(push)したデータを最初に取り出す(pop)データ構造である。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「スタック」)

2. キューというデータ構造の特徴として、最も適切なものはどれか。

  1. 最初に格納したデータを最初に取り出す先入れ先出し(FIFO)である。
  2. 最後に格納したデータを最初に取り出す後入れ先出し(LIFO)である。
  3. データを木の形に階層的に格納する。
  4. 添字(インデックス)で任意の要素に直接アクセスする。

キューは先入れ先出し(FIFO:First In First Out)で、最初に格納したデータを最初に取り出すデータ構造である。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「キュー」)

3. 配列(array)の説明として、最も適切なものはどれか。

  1. ポインタでデータ同士をつなぎ、途中への挿入・削除が容易な構造。
  2. 後入れ先出しでデータを出し入れする構造。
  3. 異なる種類の項目を1件分としてまとめた構造。
  4. 同じ型のデータを連続して並べ、添字(インデックス)で各要素を指定して直接アクセスできる構造。

配列は同じ型の要素を連続して並べ、添字で任意の要素に直接アクセスできるデータ構造である。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」)

4. レコード(record)の説明として、最も適切なものはどれか。

  1. 同じ型の値だけを添字順に並べたもの。
  2. 最後に入れた要素から取り出すもの。
  3. 氏名・年齢・住所のように、関連する複数の項目(フィールド)を1件分としてまとめたもの。
  4. データを枝分かれの階層で表したもの。

レコードは、型が異なってもよい複数の項目(フィールド)を1件分のまとまりとして扱うデータ構造である。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」)

5. Webブラウザで「戻る」ボタンを押すと直前に見たページに戻れる。この動作を実現するのに最も適したデータ構造はどれか。

  1. キュー
  2. 配列
  3. 木構造
  4. スタック

直前(最後)に訪れたページから順に戻るのは後入れ先出しの動作であり、スタックが適している。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「スタック」)

6. プリンタの印刷ジョブを、依頼された順番どおりに処理したい。この処理に最も適したデータ構造はどれか。

  1. キュー
  2. スタック
  3. 2分木
  4. レコード

依頼された順に処理するのは先入れ先出し(FIFO)であり、キューが適している。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「キュー」)

7. 空のスタックに、数値を 1、2、3、4 の順に格納(push)した後、続けて2回取り出し(pop)を行った。取り出された数値の組合せはどれか。

  1. 1 と 2
  2. 4 と 3
  3. 3 と 4
  4. 1 と 4

スタックは後入れ先出しなので、最後に入れた4、次に3の順で取り出される。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「スタック」)

8. 空のキューに、文字を A、B、C の順に格納(エンキュー)した後、2回取り出し(デキュー)を行った。取り出された文字の順序はどれか。

  1. C、B
  2. B、A
  3. A、B
  4. C、A

キューは先入れ先出しなので、最初に入れたA、次にBの順で取り出される。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「キュー」)

9. リスト(連結リスト)が配列と比べて優れている点として、最も適切なものはどれか。

  1. 添字を使って任意の要素へ一定時間で直接アクセスできる。
  2. 同じ容量ならメモリ使用量が必ず少なくなる。
  3. データを常に整列された状態に保てる。
  4. データの途中への挿入や途中からの削除を、要素の大量移動なしに行いやすい。

リストはポインタのつなぎ替えで挿入・削除ができるため、要素をずらす必要がある配列より途中の挿入・削除が容易である。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「リスト」)

10. 木構造において、最上位に位置し親を持たない節点(ノード)を何と呼ぶか。

  1. 根(ルート)
  2. 葉(リーフ)
  3. 添字

木構造の最上位にあり親を持たない節点を根(ルート)と呼ぶ。子を持たない末端の節点は葉(リーフ)である。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「木構造」)

11. 2分木(二分木)の説明として、最も適切なものはどれか。

  1. 節点が必ず2個だけの木構造。
  2. 各節点が子を最大2個まで持つ木構造。
  3. データを先入れ先出しで扱う構造。
  4. 2個の配列を組み合わせた構造。

2分木は、各節点が持つ子の数が最大2個(左と右)である木構造である。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「2分木」)

12. 木構造において、子を1つも持たない末端の節点を何と呼ぶか。

  1. 根(ルート)
  2. キー
  3. 葉(リーフ)

木構造で子を持たない末端の節点を葉(リーフ)と呼ぶ。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「木構造」)

13. 空のスタックに 1、2、3、4、5 をこの順に格納(push)し、その後すべて取り出し(pop)た。取り出される数値の順序はどれか。

  1. 1、2、3、4、5
  2. 2、1、4、3、5
  3. 5、4、3、2、1
  4. 5、1、2、3、4

スタックは後入れ先出しなので、最後に入れた5から逆順に取り出され、5、4、3、2、1となる。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「スタック」)

14. 空のスタックに対し、push(1)、push(2)、pop、push(3)、pop、pop の順に操作した。pop で取り出される値を順に並べたものはどれか。

  1. 1、2、3
  2. 2、3、1
  3. 2、1、3
  4. 3、2、1

push(1),push(2)で[1,2]。popで2、push(3)で[1,3]、popで3、popで1となり、取り出し順は2、3、1である。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「スタック」)

15. 次のうち、先入れ先出し(FIFO)で処理するのが自然な業務はどれか。

  1. 山積みの書類の一番上から順に処理する。
  2. Excelのセルを行番号・列番号で直接指定する。
  3. 組織図を階層で表す。
  4. コールセンターで着信した順に電話を応対する。

着信した順に応対するのは先入れ先出し(FIFO)であり、キューの考え方に一致する。 (IPA ITパスポート試験シラバス Ver.6.5 項番36「データ構造」用語例「キュー」)

16. 線形探索法(リニアサーチ)の説明として、最も適切なものはどれか。

  1. データを先頭から順番に1つずつ比較して目的の値を探す。
  2. 探索範囲を半分ずつ絞り込んで探す。
  3. データを木構造にしてから探す。
  4. ハッシュ関数で格納位置を計算して探す。

線形探索法は、データを先頭から順番に1つずつ比較して目的の値を探す方法である。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 用語例「線形探索法」)

17. 2分探索法(バイナリサーチ)の説明として、最も適切なものはどれか。

  1. データを先頭から末尾まで順番に比較する。
  2. データをランダムな順序で比較する。
  3. 整列済みのデータに対し、探索範囲を半分ずつ絞り込んで探す。
  4. 末尾から順番に比較する。

2分探索法は、あらかじめ整列されたデータに対して中央の値と比較し、探索範囲を半分ずつ絞り込む方法である。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 用語例「2分探索法」)

18. 2分探索法を適用するために、データが満たしていなければならない前提条件はどれか。

  1. データがすべて異なる型であること。
  2. データが昇順または降順に整列(ソート)されていること。
  3. データが連結リストで格納されていること。
  4. データ件数が必ず偶数であること。

2分探索法は中央の値と大小比較して範囲を絞るため、データがあらかじめ整列されていることが前提となる。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 用語例「2分探索法」)

19. n個のデータに対して線形探索法を行うとき、最悪の場合の比較回数はおよそ何回か。

  1. log₂n回
  2. n²回
  3. 1回
  4. n回

線形探索は先頭から順に比較するため、目的のデータが末尾にある、または存在しない場合、最悪でn回の比較が必要となる。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 用語例「線形探索法」)

20. n個の整列済みデータに対して2分探索法を行うとき、最悪の場合の比較回数はおよそ何回か。

  1. n回
  2. n²回
  3. log₂n回
  4. n/2回

2分探索は1回の比較で探索範囲が半分になるため、最悪でも約log₂n回の比較で済む。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 用語例「2分探索法」)

21. 整列済みの大量データから特定の値を効率よく探したい。線形探索法と2分探索法を比較した説明として、最も適切なものはどれか。

  1. データ件数が多いほど、2分探索法のほうが最悪の比較回数が少なく有利である。
  2. 線形探索法のほうが常に比較回数が少ない。
  3. 2分探索法は整列されていないデータにも高速に使える。
  4. どちらも比較回数は常に等しい。

整列済みデータでは2分探索法の比較回数は約log₂nで、線形探索の最悪n回より少なく、件数が多いほど差が広がり有利になる。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 用語例「2分探索法」「線形探索法」)

22. 整列されていないデータの中から目的の値を探す場合に使える探索法はどれか。

  1. 2分探索法だけが使える。
  2. どちらの探索法も使えない。
  3. データ件数が奇数のときだけ2分探索法が使える。
  4. 線形探索法が使える。

線形探索法は整列の有無に関わらず使えるが、2分探索法は整列済みが前提のため未整列データには適用できない。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 用語例「線形探索法」「2分探索法」)

23. 整列済みの1,000件のデータに対して2分探索法を用いるとき、目的のデータに到達するまでの最悪の比較回数に最も近いものはどれか。

  1. 約100回
  2. 約10回
  3. 約500回
  4. 約1,000回

2分探索の最悪比較回数は約log₂nで、log₂1000≒10(2の10乗=1024)であるため約10回となる。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 用語例「2分探索法」)

24. 整列済みの100件のデータを探索するとき、線形探索法の最悪比較回数と2分探索法の最悪比較回数の組合せとして、最も近いものはどれか。

  1. 線形探索:約7回、2分探索:約100回
  2. 線形探索:約100回、2分探索:約50回
  3. 線形探索:約100回、2分探索:約7回
  4. 線形探索:約10回、2分探索:約10回

線形探索の最悪は件数と同じ約100回、2分探索は約log₂100≒7回である。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 用語例「線形探索法」「2分探索法」)

25. 昇順に整列された配列に対して2分探索法を行い、探索対象と中央の要素を比較したところ、探している値のほうが中央の要素より大きかった。次に探索範囲とすべきなのはどこか。

  1. 中央より後ろ(大きい側)の範囲
  2. 中央より前(小さい側)の範囲
  3. 配列全体をもう一度先頭から
  4. 探索を打ち切る

昇順に整列されている場合、目的の値が中央より大きければ、中央より後ろ(大きい側)に絞り込んで探索を続ける。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 用語例「2分探索法」)

26. プログラムのソースコードにおける「インデント(字下げ)」の主な目的はどれか。

  1. 制御構造の入れ子(ネスト)などの構造を見やすくし、可読性を高める。
  2. プログラムの実行速度を必ず速くする。
  3. プログラムの容量を必ず小さくする。
  4. コンピュータが動作するために必須の文法である。

インデントは処理のまとまりや入れ子構造を視覚的に示し、人がコードを読みやすくするために用いる書き方の工夫である。 (IPA ITパスポート試験シラバス Ver.6.5 項番37「アルゴリズムとプログラミング」コーディング標準)

27. プログラムの「命名規則(ネーミングルール)」を定める主な目的として、最も適切なものはどれか。

  1. プログラムの処理速度を向上させる。
  2. 使用できる変数の個数を無制限にする。
  3. 変数名や関数名の付け方を統一し、コードの可読性や保守性を高める。
  4. コンパイルエラーを完全になくす。

命名規則は変数名や関数名の付け方を統一するもので、複数人で開発してもコードが読みやすく保守しやすくなる。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 コーディング標準)

28. コーディング標準(コーディング規約)を定める目的として、最も適切なものはどれか。

  1. プログラムの著作権を放棄する。
  2. 開発者ごとに書き方が異なるのを防ぎ、品質や可読性・保守性を一定に保つ。
  3. ハードウェアの性能を向上させる。
  4. テストを不要にする。

コーディング標準は記述形式や命名などのルールを統一し、担当者が違ってもコードの品質・可読性・保守性を保つために定める。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 コーディング標準)

29. プログラムを機能ごとに複数の部品(モジュール)に分割して開発する「モジュール分割」の利点として、最も適切なものはどれか。

  1. プログラム全体を1つの大きな塊にでき、修正箇所が探しやすい。
  2. 変数名を自由に重複させられる。
  3. 実行時に必ずメモリを消費しなくなる。
  4. 部品ごとに分けて開発・テスト・修正でき、再利用や保守がしやすくなる。

モジュール分割により、機能単位で開発・テスト・修正ができ、部品の再利用性や保守性が高まる。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 プログラム構造「モジュール分割」)

30. サブルーチン(副プログラム)の説明として、最も適切なものはどれか。

  1. 繰り返し使う一連の処理をひとまとめにし、必要な箇所から呼び出して使えるようにしたもの。
  2. プログラムを実行するためのハードウェア。
  3. データを永続的に保存する記憶装置。
  4. ネットワーク上の通信規約。

サブルーチンは、まとまった処理に名前を付けて部品化し、必要な箇所から呼び出して再利用できるようにしたものである。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 プログラム構造「サブルーチン」)

31. プログラム開発における「ライブラリ」の説明として、最も適切なものはどれか。

  1. プログラムの誤りを自動で修正する装置。
  2. よく使う機能を部品化して再利用できるようにまとめたもの。
  3. ソースコードを機械語に翻訳する人。
  4. データを暗号化する専用の鍵。

ライブラリは、汎用的によく使われる関数や処理を部品としてまとめ、他のプログラムから再利用できるようにしたものである。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 プログラム構造「ライブラリ」)

32. API(Application Programming Interface)の説明として、最も適切なものはどれか。

  1. 画面に表示される文字の書体(フォント)のこと。
  2. コンピュータ内部の演算装置のこと。
  3. 電源を供給する装置のこと。
  4. ソフトウェアの機能やデータを、他のプログラムから呼び出して利用するための取り決め(インタフェース)。

APIは、あるソフトウェアの機能やデータを外部のプログラムから利用するための呼び出し規約(インタフェース)である。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 プログラム構造「API」)

33. 自社のWebサイトに地図表示機能を組み込みたい。地図サービス提供事業者が公開している地図表示機能を、自社プログラムから呼び出して利用するために使うものはどれか。

  1. 地図サービスのAPI
  2. 地図サービスのインデント
  3. 地図サービスの命名規則
  4. 地図サービスのスタック

他社サービスの機能を自社プログラムから呼び出して利用するには、その事業者が公開しているAPIを利用する。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 プログラム構造「API」)

34. ローコード/ノーコード開発の説明として、最も適切なものはどれか。

  1. 機械語だけでプログラムを記述する手法。
  2. プログラムを一切テストしないで公開する手法。
  3. ソースコードの記述を最小限にする、またはまったく書かずに、画面操作などでアプリケーションを開発する手法。
  4. 通信を暗号化する手法。

ローコードはコード記述を最小限に、ノーコードはコードを書かずに、GUI操作などでアプリを開発する手法である。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 プログラム構造「ローコード・ノーコード」)

35. プログラミングの専門知識を持たない業務担当者が、自分で簡単な業務アプリを作りたい。最も適した開発手段はどれか。

  1. アセンブリ言語で記述する。
  2. ノーコード開発ツールを使う。
  3. コンパイラを自作する。
  4. 機械語を直接入力する。

ノーコード開発ツールは、コードを書かずに用意された部品を画面上で組み合わせてアプリを作成できるため、専門知識のない担当者に適している。 (IPA ITパスポート試験シラバス Ver.6.5 項番37 プログラム構造「ノーコード」)

無料ではじめる