平成23年度 春期5テクノロジ系

基本情報 平成23年度 春期 問5:テクノロジ系に関する問題

スタック 1, 2 があり, 図の状態になっている。関数 f はスタック 1 からポボップした データをそのままスタック 2 にプッシュする。 関数 g はスタック 2 からポボップしたデ ータを出力する。b, c, d a の順番に出力するためには, 関数をどの順で実行すればよ いか。 b C d スタック 1 スタック 2

  • affgttggg
  • bffgtg,fg,g正答
  • cffgfggftg
  • dEtfggftfgg
正答:Bffgtg,fg,g

AI解説(初心者・標準・上級)

理解度に合わせて3レベルの解説を無料で読めます。

初心者向けまずはここから。やさしく要点を解説

答えは b です。

スタックは「お皿を積み重ねる」イメージで、上から順にしか取り出せません(後入れ先出し=LIFO)。スタック1には上からb・c・dが積まれていて、関数fでスタック1→2へ移し、関数gでスタック2から出力。b・c・d・aの順で出すには、f・f・gの繰り返しなどを組み合わせます。

👉 覚え方:fは「移す」、gは「出す」。

ほかの選択肢:他の選択肢は順番がズレて、出力がb・c・d・aにならない。

標準試験対策の基準レベル

なぜこれが正解か

正解は b。スタックはLIFO(Last In First Out、後入れ先出し)のデータ構造。関数f=スタック1からpopしてスタック2へpush、関数g=スタック2からpopして出力。問題ではスタック1に上からb,c,d、最下層にa(前提)。b,c,d,aの順で出力するには、まずb,c,dをスタック2に移して取り出し、その後aを移して出力する手順を組む。f・f・g・f・g・f・g・gのような組み合わせ(出題のbの選択肢)で実現できる。

各選択肢の解説

  • a:fとgの順序が出力順b,c,d,aを生まない。
  • c:fの回数が多すぎてaが最後に出ない。
  • d:開始順序が違って出力がズレる。

覚え方・ひっかけ注意

スタック2は逆順で取り出される性質を利用する。最後に出したい要素を最初にスタック2の底に置くのがコツ。実際に紙に積み木で書きながら追うのが確実。

上級誤答論破・背景理論まで深掘り

理論的背景

2つのスタックを使った要素の並び替えは、有名な「スタックソート可能順列(stack-sortable permutation)」の問題に関連する。1つのスタックでソート可能な順列は231パターンを含まない順列(Catalan数で数えられる)として知られ、2つのスタックを使うと表現可能な順列クラスが拡大する。アルゴリズムとデータ構造の理論計算量論の入門例として教育される。

実務での使われ方

関数呼び出しのコールスタック、式評価(後置記法のスタックマシン)、深さ優先探索(DFS)、構文解析(再帰下降パーサ・LR構文解析)、Undo機能の実装で日常的に使われる。コンパイラのアクティベーションレコード管理、JavaScript/Pythonのインタプリタ実装、JVMのオペランドスタック等も同じ原理。

試験での位置づけ

基本情報のアルゴリズムとデータ構造分野で必出。スタック(LIFO)とキュー(FIFO)の対比、デック(Deque)、優先度付きキュー(ヒープ)等と組み合わせて出題。応用情報・ESS試験ではスタックオーバーフロー対策、テールコール最適化、ガベージコレクションでのスタック走査が問われる。

選択肢の発展補足

スタックは配列または連結リストで実装され、配列は高速だが容量固定、連結リストは動的だがポインタオーバーヘッドがある。並行プログラミングではロックフリースタック(Treiber stack)が知られ、CAS(Compare-And-Swap)命令で実装される。関数呼び出しのスタック深さに制限がある言語(Pythonデフォルト1000)と、末尾呼び出し最適化により無制限に再帰できる言語(Scheme、Haskell)の違いも理解しておくと応用力がつく。

出典・引用について

出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成23年度 春期5/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。

テクノロジ系の他の過去問

1
テクノロジ系
2
テクノロジ系
3
テクノロジ系
4
テクノロジ系
5
テクノロジ系

あなたの弱点を診断して、合格までの最短ルートを

この分野を連続演習し、AIがあなたの弱点を分析。合格ナビなら基本情報の過去問を解きながら学べます。