応用情報技術者 ② アルゴリズムとプログラミング

データ構造とアルゴリズム、プログラミング言語の基礎を扱う分野です。配列・リスト・スタック・キュー・木構造といったデータ構造の特徴、探索・整列アルゴリズムの計算量、再帰やポインタの考え方が頻出です。計算量のオーダー評価や、アルゴリズムの動作をトレースする問題が多いのが特徴です。単に名称を覚えるのではなく、各データ構造がどんな処理に向くか、なぜその計算量になるかを図で理解しましょう。実装経験があると強い分野で、午後試験にもつながる重要テーマです。出題数56問。

この分野の問題56問を、選択肢・正解・解説つきで掲載しています。まず自分で解答を考えてから「正解と解説を見る」を開いて答え合わせをしてください。

クイズモードで挑戦 →

63リストの実現方法のうち、配列を用いる場合の特徴として、適切なものはどれか。

  1. Aあらかじめ最大データ数に対応した領域を確保する必要がある
  2. B要素の挿入や削除が容易である
  3. C使用するデータ数に応じて動的に領域を確保できる
  4. D要素への参照にポインタのたどりを必要とする
正解と解説を見る

正解:Aあらかじめ最大データ数に対応した領域を確保する必要がある

配列は要素位置が固定されており、最大データ数を見越した領域確保が必要となる。

この問題の解説ページを開く →

64リストの実現方法のうち、連結リストの特徴として、適切なものはどれか。

  1. A要素の追加や削除の際、要素をずらす必要がある
  2. B要素を挿入する際、ポインタ値の付け替えだけで行える
  3. Cあらかじめ最大データ数に対応した領域を確保する
  4. Dインデックスを用いて任意の要素へ高速に参照できる
正解と解説を見る

正解:B要素を挿入する際、ポインタ値の付け替えだけで行える

連結リストはポインタの付け替えにより要素の追加・削除が効率的に行える。

この問題の解説ページを開く →

65Head(先頭ポインタ)とTail(末尾ポインタ)をもつ連結リストにおいて、リストの末尾への要素追加の処理量について、適切な説明はどれか。

  1. A先頭への追加より大幅に処理量が多い
  2. B要素の数に比例して処理量が増加する
  3. C必ずポインタを先頭から順にたどる必要がある
  4. D先頭への追加と同じ処理量である
正解と解説を見る

正解:D先頭への追加と同じ処理量である

HeadとTailがあれば、先頭と末尾への追加はどちらもポインタ操作のみで完結するため処理量は同じである。

この問題の解説ページを開く →

662分木を各ノードが子へのポインタをもつリスト構造で表現する場合、ノードが通常もたないものはどれか。

  1. Aノードに格納するデータ(値)
  2. B左側の子ノードを指すポインタ
  3. C右側の子ノードを指すポインタ
  4. D隣接する兄弟ノードを指すポインタ
正解と解説を見る

正解:D隣接する兄弟ノードを指すポインタ

2分木のノードは値・左子ポインタ・右子ポインタをもつが、兄弟を直接指すポインタは通常もたない。

この問題の解説ページを開く →

67スタックの動作方式を指す用語はどれか。

  1. ALIFO
  2. BFIFO
  3. CLRU
  4. DMRU
正解と解説を見る

正解:ALIFO

スタックは後入れ先出し(Last In First Out)方式である。

この問題の解説ページを開く →

68キューの動作方式を指す用語はどれか。

  1. AFIFO
  2. BLIFO
  3. CLRU
  4. DMRU
正解と解説を見る

正解:AFIFO

キューは先入れ先出し(First In First Out)方式である。

この問題の解説ページを開く →

69グラフ探索において、深さ優先探索と幅優先探索で使用されるデータ構造の組み合わせとして、適切なものはどれか。

  1. A深さ優先探索:キュー、幅優先探索:スタック
  2. B深さ優先探索:スタック、幅優先探索:キュー
  3. C深さ優先探索:配列、幅優先探索:リスト
  4. D深さ優先探索:リスト、幅優先探索:配列
正解と解説を見る

正解:B深さ優先探索:スタック、幅優先探索:キュー

深さ優先探索はスタック、幅優先探索はキューを用いる。

この問題の解説ページを開く →

70再帰的処理を含む関数呼出しの実現に用いられる制御スタックにおいて、関数ごとに積まれるデータのまとまりを何というか。

  1. Aスタックフレーム
  2. Bスタックポインタ
  3. Cフレームポインタ
  4. D戻り番地
正解と解説を見る

正解:Aスタックフレーム

関数呼出しごとのデータのまとまりをスタックフレームという。

この問題の解説ページを開く →

71完全2分木において、木の深さがHであるとき、葉の個数はいくつになるか。

  1. A2のH乗
  2. B2H
  3. C2H-1
  4. D2H+1
正解と解説を見る

正解:A2のH乗

葉の個数は2のH乗である。

この問題の解説ページを開く →

72完全2分木において、木の深さがHであるとき、葉以外の節の個数はいくつになるか。

  1. A2のH乗マイナス1
  2. B2のH乗
  3. C2H-1
  4. D2H+1
正解と解説を見る

正解:A2のH乗マイナス1

葉以外の節の個数は2のH乗から1を引いた値となる。

この問題の解説ページを開く →

732分木の走査法において、先行順(行きがけ順)の順序はどれか。

  1. A左部分木→節→右部分木
  2. B左部分木→右部分木→節
  3. C節→左部分木→右部分木
  4. D右部分木→左部分木→節
正解と解説を見る

正解:C節→左部分木→右部分木

先行順は節の処理が最初に行われる。

この問題の解説ページを開く →

742分木の走査法において、中間順(通りがけ順)の順序はどれか。

  1. A節→左部分木→右部分木
  2. B左部分木→右部分木→節
  3. C右部分木→左部分木→節
  4. D左部分木→節→右部分木
正解と解説を見る

正解:D左部分木→節→右部分木

中間順は節の処理が左部分木と右部分木の間に行われる。

この問題の解説ページを開く →

752分木の走査法において、後行順(帰りがけ順)の順序はどれか。

  1. A節→左部分木→右部分木
  2. B左部分木→節→右部分木
  3. C左部分木→右部分木→節
  4. D右部分木→左部分木→節
正解と解説を見る

正解:C左部分木→右部分木→節

後行順は節の処理が最後に行われる。

この問題の解説ページを開く →

76探索アルゴリズムのうち、探索データのキー値により、格納場所を直接計算する方法はどれか。

  1. A線形探索法
  2. B2分探索法
  3. Cチェイン法
  4. Dハッシュ法
正解と解説を見る

正解:Dハッシュ法

ハッシュ法はハッシュ関数を用いて格納場所を直接計算する。

この問題の解説ページを開く →

77ハッシュ法において、異なるキー値から同一のハッシュ値が求められることを何というか。

  1. Aオーバーフロー
  2. Bハッシュ値の分布
  3. Cガーベジコレクション
  4. D衝突(シノニム)
正解と解説を見る

正解:D衝突(シノニム)

異なるキーから同じ値が出ることを衝突という。

この問題の解説ページを開く →

78線形探索法における平均比較回数を表す式はどれか(データ数をnとする)。

  1. An
  2. Bn/2
  3. Cn-1
  4. D(n+1)/2
正解と解説を見る

正解:D(n+1)/2

探索終了までに平均で(n+1)/2回の比較を要する。

この問題の解説ページを開く →

792分探索法を用いるための前提条件として、適切なものはどれか。

  1. A探索対象が連結リストであること
  2. Bデータが昇順または降順に整列されていること
  3. Cキーのとり得る値の範囲が狭いこと
  4. D各要素のハッシュ値が衝突しないこと
正解と解説を見る

正解:Bデータが昇順または降順に整列されていること

2分探索法は整列されたデータに対してのみ適用可能である。

この問題の解説ページを開く →

80ハッシュ法におけるシノニム発生時の対応策として、オープンアドレス法の説明として適切なものはどれか。

  1. A同じハッシュ値をもつデータをポインタでつなぐ方法
  2. Bデータをヒープ領域に動的に確保する方法
  3. C別のハッシュ関数を用いて再ハッシュを行う方法
  4. Dキーの値をソートして二分探索を行う方法
正解と解説を見る

正解:C別のハッシュ関数を用いて再ハッシュを行う方法

オープンアドレス法は再ハッシュで空き場所を探す。

この問題の解説ページを開く →

81ハッシュ法におけるシノニム発生時の対応策として、チェイン法の説明として適切なものはどれか。

  1. A同じハッシュ値をもつデータをポインタでつなぐ方法
  2. B別のハッシュ関数を用いて再ハッシュを行う方法
  3. Cデータをヒープ領域に動的に確保する方法
  4. Dキーの値をソートして二分探索を行う方法
正解と解説を見る

正解:A同じハッシュ値をもつデータをポインタでつなぐ方法

チェイン法は同じハッシュ値のデータをリストでつなぐ。

この問題の解説ページを開く →

82バブルソート(隣接交換法)の計算量のオーダはどれか。

  1. AO(log n)
  2. BO(n)
  3. CO(n log n)
  4. DO(n^2)
正解と解説を見る

正解:DO(n^2)

バブルソートはn(n-1)/2回の比較を行うためO(n^2)である。

この問題の解説ページを開く →

83単純挿入法の最良計算量のオーダはどれか。

  1. AO(log n)
  2. BO(n)
  3. CO(n log n)
  4. DO(n^2)
正解と解説を見る

正解:BO(n)

元々正しい順に並んでいる場合、最良計算量はO(n)となる。

この問題の解説ページを開く →

84分割統治法の考え方に基づいた整列アルゴリズムはどれか。

  1. Aバブルソート
  2. B単純挿入法
  3. Cクイックソート
  4. D単純選択法
正解と解説を見る

正解:Cクイックソート

クイックソートは分割統治を利用する。

この問題の解説ページを開く →

85安定な整列アルゴリズムはどれか。

  1. A単純選択法
  2. Bヒープソート
  3. Cバブルソート
  4. Dクイックソート
正解と解説を見る

正解:Cバブルソート

バブルソートと単純挿入法は安定な整列法である。

この問題の解説ページを開く →

86どんなデータ列に対しても計算量がO(n log n)となる整列法はどれか。

  1. Aクイックソート
  2. Bバブルソート
  3. Cヒープソート
  4. D単純選択法
正解と解説を見る

正解:Cヒープソート

ヒープソートはデータ列の傾向によらずO(n log n)である。

この問題の解説ページを開く →

87マージソートの特徴として、適切なものはどれか。

  1. Aデータ数の半分程度の作業領域を必要とする
  2. B安定ではないが、非常に高速である
  3. Cどんなデータ列でも最悪O(n^2)となる可能性がある
  4. Dヒープ領域を全く使用しない
正解と解説を見る

正解:Aデータ数の半分程度の作業領域を必要とする

マージソートは追加の作業領域を必要とすることが特徴である。

この問題の解説ページを開く →

88再帰関数における定義のうち、自分自身を呼び出さないものはどれか。

  1. A再帰的ステップ
  2. B基底条件
  3. C終了判定条件
  4. Dスタックフレーム
正解と解説を見る

正解:B基底条件

基底条件は再帰の終了条件であり自分自身を呼び出さない。

この問題の解説ページを開く →

89再入可能(リエントラント)プログラムの性質として、適切なものはどれか。

  1. A一度実行したプログラムを再ロードせずに再実行可能である
  2. B記憶装置上のどのアドレスに配置しても実行可能である
  3. C複数のタスクから同時に呼び出されても正しく動作する
  4. D実行途中の状態を保持するために必ずハードウェアスタックを用いる
正解と解説を見る

正解:C複数のタスクから同時に呼び出されても正しく動作する

リエントラントプログラムは共有手続とタスク単位のデータ部からなる。

この問題の解説ページを開く →

90再使用可能(リユーザブル)プログラムの性質として、適切なものはどれか。

  1. A複数のタスクから同時に呼び出されても正しく動作する
  2. B記憶装置上のどのアドレスに配置しても実行可能である
  3. C各変数の初期化をプログラムの最初または最後に行う必要がある
  4. D一度実行したプログラムを再ロードせずに再実行可能である
正解と解説を見る

正解:D一度実行したプログラムを再ロードせずに再実行可能である

リユーザブルプログラムは再ロードなしで再実行可能だが、同時実行はできない。

この問題の解説ページを開く →

91再配置可能(リロケータブル)プログラムを実現するために用いられるものはどれか。

  1. Aスタックポインタ
  2. Bベースレジスタ
  3. Cフレームポインタ
  4. Dハッシュ関数
正解と解説を見る

正解:Bベースレジスタ

ベースレジスタを用いて有効アドレスを計算する。

この問題の解説ページを開く →

92値呼出し(call by value)の特徴はどれか。

  1. A引数の値そのものを渡すため、主プログラム内の変数に影響しない
  2. B引数のアドレスを渡すため、主プログラム内の変数に影響する
  3. C手続内で変数を変更すると主プログラムの変数も変わる
  4. Dアドレス参照によって処理速度が大幅に向上する
正解と解説を見る

正解:A引数の値そのものを渡すため、主プログラム内の変数に影響しない

値呼出しは値のコピーを渡すため影響を与えない。

この問題の解説ページを開く →

93参照呼出し(call by reference)の特徴はどれか。

  1. A主プログラムから変数のアドレスを渡すため、主プログラム内の変数に影響する
  2. B引数の値のコピーを渡すため、主プログラム内の変数に影響しない
  3. C手続内で引数を変更しても主プログラムの変数には影響しない
  4. D手続内での変更は一時的な変数にのみ反映される
正解と解説を見る

正解:A主プログラムから変数のアドレスを渡すため、主プログラム内の変数に影響する

参照呼出しはアドレスを渡すため元の変数を変更する。

この問題の解説ページを開く →

94ガーベジコレクションの説明として、適切なものはどれか。

  1. Aプログラム実行中の動的な領域確保を行う機能
  2. Bどこからも参照されない不要な領域を自動的に解放・回収する機能
  3. Cヒープ領域の断片化を強制的に解消する機能
  4. Dスタック領域の不足を動的に補う機能
正解と解説を見る

正解:Bどこからも参照されない不要な領域を自動的に解放・回収する機能

ガーベジコレクションは不要領域を回収し再利用可能にする。

この問題の解説ページを開く →

95手続型言語の特徴として、適切なものはどれか。

  1. A関数の定義とその呼出しによってプログラムを記述する
  2. B述語論理を基礎とした論理式によって記述する
  3. Cデータとメッセージを基本構成要素とする
  4. D問題解決のための処理手順を順を追って記述する
正解と解説を見る

正解:D問題解決のための処理手順を順を追って記述する

手続型言語は処理手順(アルゴリズム)を記述する。

この問題の解説ページを開く →

96関数型言語の特徴として、適切なものはどれか。

  1. A問題解決のための処理手順を順を追って記述する
  2. B述語論理を基礎とした論理式によって記述する
  3. C関数の定義とその呼出しによってプログラムを記述する
  4. Dデータとメッセージを基本構成要素とする
正解と解説を見る

正解:C関数の定義とその呼出しによってプログラムを記述する

関数型言語は関数の定義と呼出しが中心である。

この問題の解説ページを開く →

97論理型言語の推論処理において、失敗した際にそれまでの効果を元に戻し、異なるパターンで試行することを何というか。

  1. Aユニフィケーション
  2. Bガーベジコレクション
  3. C再入処理
  4. Dバックトラック
正解と解説を見る

正解:Dバックトラック

バックトラックは失敗時の後戻り処理である。

この問題の解説ページを開く →

98JSONの特徴として、適切なものはどれか。

  1. AXMLのように任意のタグを定義できる仕様である
  2. BJavaScriptの仕様を基にしたデータ記述仕様である
  3. Cタグの代わりにインデントを使って構造を表現する
  4. D論理式によってプログラムを記述する言語である
正解と解説を見る

正解:BJavaScriptの仕様を基にしたデータ記述仕様である

JSONはJavaScriptのオブジェクト表記を基にしている。

この問題の解説ページを開く →

99Javaサーブレットの説明として、適切なものはどれか。

  1. AWebブラウザ側でダウンロードして実行されるプログラム
  2. BWebサーバ上でクライアントの要求に応じて実行されるJavaプログラム
  3. Cアプリケーションの部品として取り扱うための規約
  4. D動画や音声の再生タイミングをXMLで定義するもの
正解と解説を見る

正解:BWebサーバ上でクライアントの要求に応じて実行されるJavaプログラム

JavaサーブレットはWebサーバ側で動作する。

この問題の解説ページを開く →

100連結リストで、追加先の直前要素を指すポインタが与えられているとき、その直後に要素を追加する計算量のオーダはどれか。

  1. AO(n)
  2. BO(n log n)
  3. CO(1)
  4. DO(n^2)
正解と解説を見る

正解:CO(1)

直前要素が既知ならポインタの付け替えのみで追加できるためO(1)である。

この問題の解説ページを開く →

1012分探索木の探索における最悪計算量のオーダはどれか。

  1. AO(n)
  2. BO(log n)
  3. CO(n log n)
  4. DO(n^2)
正解と解説を見る

正解:AO(n)

バランスが偏った2分探索木では、探索は線形探索と同じになりO(n)となる。

この問題の解説ページを開く →

102ハッシュ表を用いた探索において、チェイン法を採用した場合の探索計算量のオーダ(n個のデータをm個の表に格納)はどれか。

  1. AO(n)
  2. BO(log n)
  3. CO(1)
  4. DO(n/m)
正解と解説を見る

正解:DO(n/m)

探索はリストの長さ平均n/mに比例する。

この問題の解説ページを開く →

103バブルソートにおいて、データが既に正しい順に並んでいる場合の比較回数のオーダはどれか。

  1. AO(n)
  2. BO(n log n)
  3. CO(log n)
  4. DO(n^2)
正解と解説を見る

正解:DO(n^2)

バブルソートはデータ列の傾向に関わらず比較回数は一定でO(n^2)である。

この問題の解説ページを開く →

104クイックソートにおいて、最小値あるいは最大値を基準値とした場合の最悪計算量のオーダはどれか。

  1. AO(n^2)
  2. BO(n)
  3. CO(n log n)
  4. DO(log n)
正解と解説を見る

正解:AO(n^2)

クイックソートで基準値が偏ると分割が不均衡になりO(n^2)となる。

この問題の解説ページを開く →

105再帰プログラムの特徴として、適切なものはどれか。

  1. A実行途中の状態をヒープ領域で直接管理する
  2. B自分自身を呼び出せないのでループ処理のみで実現する
  3. C再入可能ではなく、一度のタスクでのみ使用可能である
  4. D自分自身を呼び出すことができ、スタックを用いて制御される
正解と解説を見る

正解:D自分自身を呼び出すことができ、スタックを用いて制御される

再帰は自分自身を呼び出し、LIFO方式のスタックで制御される。

この問題の解説ページを開く →

106スタック領域の説明として、適切なものはどれか。

  1. A割当てと解放の順序に関連がないデータの格納に使用される
  2. Bサブルーチンからの戻り番地の退避や局所変数の格納に使用される
  3. Cプログラム実行中に動的にメモリを確保する領域である
  4. Dガーベジコレクションの対象となる領域である
正解と解説を見る

正解:Bサブルーチンからの戻り番地の退避や局所変数の格納に使用される

スタックは戻り番地や局所変数の管理に使われる。

この問題の解説ページを開く →

107B木における節の構造について、適切なものはどれか。

  1. A各節にはポインタのみが格納され、キーは持たない
  2. B各節は常に2つの子を持つ完全2分木である
  3. C各節には1つのキーのみ格納される
  4. D各節にはキーと子へのポインタが格納される
正解と解説を見る

正解:D各節にはキーと子へのポインタが格納される

B木は節にキーと枝へのポインタを格納する。

この問題の解説ページを開く →

108単純挿入法の平均的な計算量のオーダはどれか。

  1. AO(n)
  2. BO(n^2)
  3. CO(n log n)
  4. DO(log n)
正解と解説を見る

正解:BO(n^2)

単純挿入法は平均でO(n^2)である。

この問題の解説ページを開く →

109オブジェクト指向言語の特徴として、適切なものはどれか。

  1. Aすべてのデータはオブジェクトであり、メッセージ送受で処理する
  2. Bすべての計算が関数を引数として渡すことで実現される
  3. Cプログラムは事実と規則の記述から構成される
  4. D処理手順を1文ずつ順を追って記述する
正解と解説を見る

正解:Aすべてのデータはオブジェクトであり、メッセージ送受で処理する

オブジェクト指向はオブジェクトとメッセージが基本である。

この問題の解説ページを開く →

110XMLにおいて、文書構造を定義するための記述(スキーマ言語)を何というか。

  1. ACSS
  2. BXSLT
  3. CDTD
  4. DSMIL
正解と解説を見る

正解:CDTD

DTDはXMLの文書構造を定義する。

この問題の解説ページを開く →

111線形リストを用いた探索において、特定の要素を探すための計算量はどれに比例するか。

  1. A要素の総数nのlogに比例する
  2. B要素の総数nの2乗に比例する
  3. C要素の総数nに比例する
  4. D定数時間である
正解と解説を見る

正解:C要素の総数nに比例する

線形リストの探索(線形探索)はnに比例する。

この問題の解説ページを開く →

112単純選択法の比較回数のオーダはどれか。

  1. AO(n)
  2. BO(n^2)
  3. CO(log n)
  4. DO(n log n)
正解と解説を見る

正解:BO(n^2)

単純選択法はn(n-1)/2回の比較を行うためO(n^2)である。

この問題の解説ページを開く →

113再帰関数の階乗定義において、n=0のとき返す値はどれか。

  1. A1
  2. B0
  3. Cn
  4. Dn-1
正解と解説を見る

正解:A1

階乗定義では0の階乗は1である。

この問題の解説ページを開く →

114ヒープソートにおいて、データを高速に整列できる理由として適切なものはどれか。

  1. A逐次添加法に基づいているから
  2. Bデータ構造を利用して常にO(n log n)の効率を保つから
  3. C分割統治法に基づいているが、安定な整列法だから
  4. D安定な整列法であり、データ列に関わらず効率が良いから
正解と解説を見る

正解:Bデータ構造を利用して常にO(n log n)の効率を保つから

ヒープは完全2分木を利用し、常にO(n log n)を保証する。

この問題の解説ページを開く →

115XML Stylesheet Language Transformations(XSLT)の説明として、適切なものはどれか。

  1. AWebブラウザ上で動作するスクリプト言語
  2. BXMLの文書構造を定義するスキーマ言語
  3. CXML文書を別の文書形式へ変換するための仕様
  4. D動画の再生タイミングをXMLで定義するもの
正解と解説を見る

正解:CXML文書を別の文書形式へ変換するための仕様

XSLTはXML文書の変換仕様である。

この問題の解説ページを開く →

116ハッシュ法において、シノニムが発生しなかった場合の探索時間はどうなるか。

  1. Aデータの個数に比例する
  2. B表の大きさ(M)に比例する
  3. Cデータの個数に関わらず一定である
  4. D計算不可能である
正解と解説を見る

正解:Cデータの個数に関わらず一定である

シノニム発生がないと仮定すれば、探索時間は一定である。

この問題の解説ページを開く →

117プログラム言語の分類において、再帰処理向きの言語はどれか。

  1. A手続型言語
  2. B論理型言語
  3. C関数型言語
  4. Dオブジェクト指向言語
正解と解説を見る

正解:C関数型言語

関数型言語は再帰処理に適している。

この問題の解説ページを開く →

118スタック領域とヒープ領域の違いとして、適切なものはどれか。

  1. Aヒープ領域はLIFO方式で制御される
  2. Bスタック領域はサブルーチンの戻り番地の退避に使用される
  3. Cスタック領域はプログラム実行中に動的にサイズが変化し解放される
  4. Dヒープ領域は静的変数の格納に使用される
正解と解説を見る

正解:Bスタック領域はサブルーチンの戻り番地の退避に使用される

スタックは戻り番地管理に使用される。

この問題の解説ページを開く →
応用情報技術者の全分野一覧へ戻る