アルゴリズムとプログラミングのミニテスト(全44問)

探し方・並べ方・入れ物と、プログラムの書き方を問う44問。番兵で何が減るのか、件数を2倍にすると比較回数はどうなるか、安定な整列はどれか、値呼出しと参照呼出しの違い、配列とリストで得意なことが入れ替わることなど、性質の使い分けを集めています。

分野
アルゴリズムとプログラミング
出る試験
基本情報・応用情報
問題数
44問(4択・その場で採点)

この単元で問われるのは、手順そのものより「どの性質がどの場面に合うか」です。

探し方は2つしかなく、分かれ目は並んでいるかどうか。入れ物も2つで、分かれ目はどちらの端から出すか。整列だけは種類が多いのですが、試験に出るのは遅いグループと速いグループの分け方と、安定かどうかにほぼ集約されます。

いくつかの問題は、どれかを選ぶのではなく当てはまらないものを探す形です。落ち着いて読んでください。

問題は全部で37問あり、解くたびに10問が選ばれます。組合せが毎回変わるので、何度か解き直すと穴のあるところが見えてきます。

0 / 44 問

問1

線形探索で番兵を使ったときの効果として、最も適切なものはどれか。

正解は 4番:1件あたりの判定が2つから1つに減り、判定の回数がおよそ半分になる

ふつうに書くと、1件ごとに「まだ範囲の中か」と「探している値と一致するか」の2つを判定しています。データの最後の次の位置に、探している値そのものを置いておくと、必ずどこかで一致するので、範囲の判定が要らなくなります。この置いておく値を番兵と呼びます。

ほかの選択肢は

減るのは範囲の判定のほうで、探している値との比較そのものは減りません。見つからなかった場合は、番兵との比較が1回増えます。計算量は O(n) のままなので、二分探索と同じ速さになるわけでもありません。

「線形探索」の解説を読む →

問2

線形探索のほうが二分探索より向いている場面として、最も適切なものはどれか。

正解は 1番:データが並んでいない状態で、1回だけ探すとき

二分探索は、データが並んでいることが前提です。並んでいないなら、まず並べ替える手間がかかります。1回しか探さないなら、その手間のほうが高くつくので、端から順に見ていくだけで十分です。

ほかの選択肢は

整列済みで何度も探すとき、件数が非常に多いときは、いずれも二分探索が有利な場面です。書き換えが少なく件数が固定されていることも、並べ替えの手間を1回で済ませられるので二分探索に向いた条件になります。問題文に「整列済みの」という言葉があるかどうかが、最初の手がかりになります。

「線形探索」の解説を読む →

問3

整列済みのデータを二分探索で探すとき、データの件数を2倍にすると、最大の比較回数はどう変わるか。

正解は 2番:1回増える

二分探索は、1回比べるごとに探す範囲を半分に捨てます。逆に言えば、件数が2倍になっても、最初の1回で元の件数の範囲に戻るということです。そのため増えるのは1回だけ。1,024件なら最大10回、2,048件なら11回、4,096件なら12回です。件数が1,000倍になっても、比較回数は10回増えるだけで済みます。

ほかの選択肢は

件数が2倍になれば比較回数も2倍になるのは線形探索のほうで、こちらの計算量は O(n) です。

「二分探索」の解説を読む →

問4

二分探索の弱点として、適切なものはどれか。

正解は 1番:データを1件追加するだけでも、並び順を保つために後ろをずらす必要がある

二分探索は、探す範囲を半分ずつ捨てていくので、件数が増えても比較回数はゆるやかにしか増えません。そのかわり、並んでいることが前提なので、途中に1件足すだけで並び順を保つ作業が必要になります。何度も探すが、あまり書き換えないデータに向いているのはこのためで、データベースの索引が速いのも同じ考え方によります。

ほかの選択肢は

比較回数が件数に比例して増えるのは線形探索のほうです。

「二分探索」の解説を読む →

問5

整列アルゴリズムのうち、安定でないものはどれか。

正解は 4番:選択ソート

同じ値が複数あったとき、元の並び順が保たれる整列を安定であるといいます。たとえば同じ80点のAさんとBさんが元の順のまま残れば安定、入れ替わる可能性があれば安定ではありません。

ほかの選択肢は

バブルソート・挿入ソート・マージソートは安定で、選択ソート・クイックソート・ヒープソートは安定ではありません。名簿をクラス順に並べてから点数順に並べ直す、といった二段階の並べ替えをするときに、この性質が効いてきます。

「整列(ソート)」の解説を読む →

問6

8件のデータを並べ替えるとき、単純な方法(O(n²))ではなく速い方法(O(n log n))を選ぶ意味が薄いのはなぜか。

正解は 4番:件数が少ないうちは、両者の差が3倍ほどしかないため

8件なら n log n がおよそ24、n² が64で、3倍ほどの差しかありません。手間をかけて速い方法を使うほどの差ではない、ということです。差が効いてくるのは件数が千、万と増えてからで、1,000件でおよそ100倍、100万件ではおよそ5万倍になります。なおこの数は、伸び方をくらべるための目安であって、実際に数えた回数そのものではありません。

ほかの選択肢は

件数が少ないときに速い方法が必ず遅くなるわけでも、正しく並べ替えられなくなるわけでもありません。

「整列(ソート)」の解説を読む →

問7

ある処理の途中で別の処理を呼び出したとき、戻り先を覚えておくのにスタックが使われる。その理由として最も適切なものはどれか。

正解は 3番:最後に呼んだ処理が最初に戻ってくるので、後入先出の性質と合うため

呼び出しが入れ子になるほど戻り先は増えていきますが、戻る順番は呼んだ順の逆になります。最後に呼んだ処理が最初に終わって戻ってくるので、後に入れたものから先に出すスタックとぴったり合います。積む場所が足りなくなるとスタックオーバフローという異常になり、自分自身を呼ぶ処理で止まる条件を書き忘れたときに起こります。

ほかの選択肢は

先に入れたものから先に出すのはキューの性質です。重要度の高いものから取り出したいときは、優先度付きキューという別の入れ物を使います。

「スタック」の解説を読む →

問8

スタックの性質が生かされている例として、適切でないものはどれか。

正解は 3番:印刷を指示した順に、紙が出てくる

印刷を指示した順に出てくるのは、先に入れたものから先に出す形なので、スタックではなくキューです。

ほかの選択肢は

残りの3つは、どれも「直前のものから順に」という共通点があります。元に戻すは直前の操作から取り消しますし、逆ポーランド記法は演算子が出てきたら直前の2つの数に対して計算します。呼び出しの戻り先も、最後に呼んだものから先に戻ります。縦に積んで上から取るのがスタック、横に並んで前から出るのがキュー。動作の絵に戻れば取り違えません。

「スタック」の解説を読む →

問9

配列でキューを作るとき、先頭と末尾の位置を数字で覚えておく方法には、使い続けるうちに起きる不都合がある。それはどれか。

正解は 3番:前のほうが空いているのに、末尾が配列の終わりに達して入れられなくなる

先頭と末尾を数字2つで覚えておけば、取り出すときは先頭を、入れるときは末尾を1つ進めるだけで済み、並んでいるものを動かさずにすみます。ただし出し入れをくり返すうちに、2つの数字はどんどん配列の右へ進み、やがて終わりに達します。前のほうは空いているのに、もう入れられない。これを避けるため、末尾が終わりまで来たら先頭へ戻すようにした形をリングバッファ(環状キュー)と呼びます。

ほかの選択肢は

取り出すたびに全員を前へずらすのは、この方法にする前の素直な作り方のほうで、並んでいる数が多いほど時間がかかります。

「キュー」の解説を読む →

問10

来た順ではなく、重要度の高いものから取り出したい。このときに使う入れ物はどれか。

正解は 1番:優先度付きキュー

キューは先に入れたものから先に取り出す入れ物なので、重要度で順番を変えることはできません。救急外来で、来た順ではなく症状の重い人から診るような場合には、優先度付きキューという別の入れ物を使います。

ほかの選択肢は

リングバッファは、配列でキューを作るときに同じ場所を使い回すための形で、取り出す順番は先入先出のままです。スタックは後に入れたものから先に出す入れ物なので、これも重要度で選ぶわけではありません。

「キュー」の解説を読む →

問11

処理時間が O(n²) で表されるアルゴリズムがある。データの件数を2倍にしたとき、処理時間はおよそ何倍になるか。

正解は 1番:4倍

O(n²) は、件数を2乗した形で時間が伸びることを表します。件数が2倍になれば 2 の2乗で4倍、3倍になれば3の2乗で9倍です。件数そのものではなく、2乗した値の比で考えるのが要点になります。

ほかの選択肢は

2倍になるのは O(n) のとき、ほとんど変わらないのは O(log n) や O(1) のときです。8倍になるのは O(n³) で件数を2倍にした場合で、2の3乗にあたります。

「計算量」の解説を読む →

問12

計算量を表すとき、3n² + 5n + 100 を O(n²) と書く。このように係数や小さい項を落とす理由として、最も適切なものはどれか。

正解は 1番:件数が増えたときの伸び方を比べるには、いちばん大きい項だけで足りるから

計算量は、件数が増えたときに時間がどう伸びるかを表すものです。件数が大きくなるほど、いちばん次数の高い項が全体を支配し、ほかの項の占める割合は小さくなっていきます。伸び方を比べるという目的に対しては、その項だけを見れば判断できます。

ほかの選択肢は

係数や小さい項が処理時間に影響しないわけではありません。件数が小さいうちは、むしろそちらが効きます。計算自体が行えなくなることもなく、パソコンの性能が上がっても係数が0になることはありません。落としているのは「比べるのに要らないから」であって、「無いから」ではないという点が分かれ目です。

「計算量」の解説を読む →

問13

根がA、Aの左の子がB・右の子がC、Bの左の子がD・右の子がEである2分木を、先行順(根→左→右)でたどったときの並びはどれか。

正解は 2番:A B D E C

先行順は、節に着いたらまず自分を書き、それから左の部分木、右の部分木の順に進みます。Aで自分を書き、左のBへ降りてBを書き、さらに左のDを書きます。Dは葉なのでBへ戻り、右のEを書きます。最後にAの右のCへ移ってCを書き、A B D E C となります。

ほかの選択肢は

D B E A C は中間順、D E B C A は後行順の並びです。A B C D E は同じ深さの節を上の段から順に読む幅優先探索の並びで、巡回の3つの順番のどれでもありません。

「木構造」の解説を読む →

問14

木を深さ優先でたどるときに使うデータ構造と、幅優先でたどるときに使うデータ構造の組合せはどれか。

正解は 1番:深さ優先はスタック、幅優先はキュー

深さ優先は、行けるところまで降りてから直前の分かれ道へ戻ります。最後に通った分かれ道から戻るので、後に入れたものを先に取り出すスタックが合います。幅優先は、同じ深さの節を全部見てから1段下へ進みます。先に見つけた節から順に処理するので、先に入れたものを先に出すキューが合います。

ほかの選択肢は

この対応は逆にすると成り立ちません。キューで深さ優先をしようとすると、降りる前に同じ段の節を処理してしまい、幅優先の動きになります。どちらも同じ構造で済ませることもできません。

「木構造」の解説を読む →

問15

再帰を使った処理で、呼び出しを打ち切る条件を書き忘れた。このとき起こることとして、最も適切なものはどれか。

正解は 4番:呼び出しが積み上がり続け、スタックがあふれて異常終了する

再帰は、自分自身を呼ぶたびに呼び出しが積み上がります。積み上がった場所は、戻ってくるまで解放されません。打ち切る条件が無いと呼び出しが終わらず、積む場所をすべて使い切ったところであふれます。この止まり方をスタックオーバーフローと呼びます。

ほかの選択肢は

何も起こらずに終わることはなく、むしろ止まらないことが問題になります。回数の既定値で自動的に打ち切る仕組みはありません。打ち切る条件の有無は書き方の問題なので、コンパイル時に誤りとして検出されることも期待できません。

「再帰」の解説を読む →

問16

繰返し(ループ)ではなく再帰で書くほうが向いている処理として、最も適切なものはどれか。

正解は 2番:木をたどって、枝分かれした先から元の場所へ戻ってくる処理

再帰では、呼び出しが積み上がること自体が「どこから来たか」の記録になります。枝分かれして戻ってくる処理では、この記録のおかげで戻り先を自分で覚えておく必要がありません。木をたどる処理が代表例です。

ほかの選択肢は

先頭から末尾まで順に見ていくだけの処理や、決まった回数をくり返す処理には戻り先がないので、繰返しのほうが向きます。呼び出しには場所も時間もかかるため、積み上げる必要がないなら積まないほうが速く済みます。表示するだけの処理には、そもそもくり返しがありません。

「再帰」の解説を読む →

問17

再配置可能なプログラムの説明として、最も適切なものはどれか。

正解は 3番:主記憶上のどの位置に配置しても、正しく実行できる

再配置可能は、プログラムを主記憶のどこへ置いても動く性質です。場所を「1000番地」のように決め打ちで書かず、「この命令から20個先」のように相対的に書いておくと、全体がどこへ移っても位置の関係が崩れません。仮想記憶では置き場所が実行のたびに変わるので、いまはこの性質が前提になっています。

ほかの選択肢は

再ロードせずにもう一度実行できるのは再使用可能、複数のタスクが同時に呼び出しても動くのは再入可能、自分自身を呼び出せるのは再帰的です。4つは名前が似ていますが、どこに置けるか、もう一度使えるか、同時に使えるか、自分を呼べるかと、問うていることが別々です。

「プログラムの性質」の解説を読む →

問18

プログラムを再入可能にするために必要なこととして、最も適切なものはどれか。

正解は 3番:実行中に書き換わる値を、呼び出したタスクごとに別の領域へ置く

再入可能なプログラムは、本体を主記憶に1つしか持ちません。複数のタスクが同時にその1つを使うので、計算の途中の値を本体の中に置くと、あとから来たタスクが先のタスクの値を上書きしてしまいます。書き換わる値だけをタスクごとに分けて持ち、本体は実行中に自分を書き換えない作りにします。

ほかの選択肢は

タスクの数だけ複製を用意すると主記憶の節約になりません。複製しないで済ませることが、この性質の狙いです。処理の最後に初期値へ戻すのは再使用可能にするための工夫で、同時に実行されている最中には間に合いません。順番に待たせるのは排他制御であり、同時に使えるようにする再入可能とは逆の考え方です。

「プログラムの性質」の解説を読む →

問19

コンパイラとインタプリタの違いとして、最も適切なものはどれか。

正解は 2番:コンパイラは全体をまとめて翻訳してから実行し、インタプリタは1行ずつ解釈しながら実行する

コンパイラは、プログラム全体を先に機械語へ翻訳し、できあがったものを実行します。インタプリタは翻訳を先に済ませず、1行ずつ解釈しながらその場で実行します。前者は実行が速いかわりに直すたび翻訳をやり直し、後者はすぐ動かせるかわりに実行が遅くなりやすい、という関係です。

ほかの選択肢は

どちらも高級言語を扱う方式で、扱う言語の段で分かれているわけではありません。同じ言語をどちらの方式でも動かせます。機械語を生成するかどうかで分かれるのでもなく、最終的に機械語が実行される点は共通です。

「プログラム言語」の解説を読む →

問20

機械語の説明として、最も適切なものはどれか。

正解は 3番:CPUが翻訳なしで直接実行でき、CPUの種類ごとに命令が異なる

機械語は0と1の並びで、CPUが翻訳を挟まずにそのまま実行できる唯一の形です。どの並びがどの命令を表すかはCPUの設計で決まるため、ある機械の機械語が別の機械でそのまま動く保証はありません。

ほかの選択肢は

CPUによらず共通ではなく、むしろ種類ごとに違う点が特徴です。命令に覚えられる名前を付けたものはアセンブリ言語、人の言葉に近づけて機械の構造を知らずに書けるようにしたものは高級言語です。

「プログラム言語」の解説を読む →

問21

構造化プログラミングで、どこへでも飛べる命令(goto文)を使わないようにする理由として、最も適切なものはどれか。

正解は 4番:飛び先が自由だと処理の流れを目で追えず、修正したときの影響範囲が分からなくなるから

飛び先を自由に書けると、ある行へどこから来るのかを知るために、全部の飛び先を探すことになります。流れが目で追えないので、一部を直したときにどこが壊れるかも読み取れません。3つの基本構造だけで書くと、処理のまとまりが入口1つ・出口1つの箱になり、上から下へ読めば順番が分かります。

ほかの選択肢は

goto文があっても翻訳はできますし、速度が必ず遅くなるわけでもありません。多くの言語にいまも残っており、取り除かれたわけでもありません。使わないのは禁じられているからではなく、使わずに書けるうえ、そのほうが読めるからです。

「構造化プログラミング」の解説を読む →

問22

モジュール分割の良し悪しについて、目指すべき形として最も適切なものはどれか。

正解は 2番:モジュールの中の結び付きは強く、モジュールどうしの結び付きは弱くする

1つのモジュールは1つの目的のことだけをしている状態が望ましく、これを結び付きが強いといいます。一方、モジュールどうしは引数と戻り値だけをやり取りし、相手の中身を知らない状態が望ましく、これを結び付きが弱いといいます。こうしておくと、1か所の修正がほかへ波及しません。

ほかの選択肢は

向きを逆にすると、1つのモジュールが関係のない仕事を抱え、しかも互いの中身に依存することになります。どこを直せばよいかが分からなくなり、構造化の狙いと正反対の状態です。両方を同じ向きにそろえるのも誤りで、中と外では目指す向きが逆になります。

「構造化プログラミング」の解説を読む →

問23

オブジェクト指向における「多相性(ポリモーフィズム)」の説明として、最も適切なものはどれか。

正解は 2番:同じ呼び出しに対して、相手のクラスによって異なる動作をすること

犬にも猫にも「鳴け」と言えば、犬はワンと鳴き猫はニャーと鳴きます。呼ぶ側は相手が犬か猫かを気にしません。種類が増えても呼ぶ側の処理を書き直さずに済むところに値打ちがあります。種類ごとに場合分けを書いていると、足すたびにその場合分けを全部直すことになります。

ほかの選択肢は

データと手続をまとめて外から隠すのはカプセル化、上位の性質を下位が受け継ぐのは継承です。1つのクラスから複数のインスタンスを作れるのはクラスとインスタンスの関係そのもので、どのクラスにも当てはまる当たり前の性質です。

「オブジェクト指向」の解説を読む →

問24

オブジェクト指向における、オーバーライドとオーバーロードの違いとして、最も適切なものはどれか。

正解は 3番:オーバーライドは受け継いだメソッドを定義し直すこと、オーバーロードは同じ名前のメソッドを引数の違いで使い分けること

オーバーライドは上書きで、上位クラスから受け継いだメソッドを、下位クラスで自分用に定義し直すことです。オーバーロードは積み増しで、同じ名前のメソッドを引数の型や数を変えて複数用意し、呼び出し方によって使い分けることです。「上書き」と「積み増し」で覚えると取り違えにくくなります。

ほかの選択肢は

2つを入れ替えた説明は誤りです。どちらもメソッドについての話で、クラスやインスタンスを作り直すこととは関係がありません。名前が似ているだけで別のことを指すので、言語による呼び方の違いでもありません。

「オブジェクト指向」の解説を読む →

問25

共通言語基盤(CLI)のように、複数の高級言語をいったん共通の中間言語へ変換する方式の利点として、最も適切なものはどれか。

正解は 2番:言語の数とコンピュータの種類を掛けた数ではなく、足した数の仕組みを用意すれば済む

高級言語から機械語へ直接翻訳する作りでは、言語3つと機械4種類で12通りの仕組みが要ります。いったん共通の中間言語へそろえると、言語ごとの変換が3つと、機械ごとの実行環境が4つの合計7つで済みます。言語を1つ増やしても変換を1つ作るだけで足ります。

ほかの選択肢は

中間言語を経由すると、実行時にもう一段の処理が入るので、機械語より速くなることはありません。機械語を直接書けるようにする仕組みでもなく、むしろ機械語を意識しなくて済むようにするものです。誤りが実行前にすべて検出できるようになるわけでもありません。

「共通言語基盤」の解説を読む →

問26

共通言語基盤(CLI)における共通型システム(CTS)の役割として、最も適切なものはどれか。

正解は 4番:整数や文字列などの型を1か所で定め、異なる言語で書いた部品どうしを受け渡しできるようにする

型を言語ごとに決めていると、ある言語の整数と別の言語の整数が同じものだと保証できません。共通型システムは、コンパイラもツールも基盤自身も同じ型の決まりに従うようにするものです。これがあるので、C#で書いたクラスをVisual Basicからそのまま呼べます。

ほかの選択肢は

使われなくなった記憶領域を回収するのはガベージコレクション、中間言語を実際に動かすのは仮想実行システムの仕事です。どちらも共通言語基盤の一部ではありますが、型をそろえる役目とは別です。主記憶のどこへ置くかを決めるのはOSの記憶管理にあたります。

「共通言語基盤」の解説を読む →

問27

HTMLで <h1> タグを使うと、ブラウザでは大きく太い文字で表示される。この表示になる理由として、最も適切なものはどれか。

正解は 4番:ブラウザが、何も指定されていないときの見せ方をあらかじめ持っているから

<h1> が示しているのは「ここは見出しである」という意味だけで、大きさには触れていません。ブラウザは、見せ方が何も指定されていないときのために独自の既定を持っており、それが当たって大きく太くなります。CSSで「見出しは小さく」と書けば、<h1> のまま小さくなります。

ほかの選択肢は

タグが大きさを指定しているわけでも、HTMLの仕様で大きさが決まっているわけでもありません。もし決まっていたら、CSSで変えられないはずです。検索エンジンは表示に関与しません。

「HTML」の解説を読む →

問28

XHTMLの説明として、最も適切なものはどれか。

正解は 4番:HTMLをXMLの文法に従って書き直したもので、終了タグを省略できない

XHTMLは、HTMLにXMLの規則をそのまま持ち込んだものです。タグ名はすべて小文字、終了タグは省略できない、中身のないタグは自分で閉じる、属性の値は必ず引用符で囲む、といった決まりが加わります。ゆるい書き方が許されていたHTMLに比べ、解釈が分かれにくくなります。

ほかの選択肢は

見せ方はXHTMLでもCSSが受け持つので、CSSが不要になるわけではありません。扱える要素を減らしたものでも、携帯電話向けに通信量を減らしたものでもありません。変わったのは書き方の厳しさだけです。

「HTML」の解説を読む →

問29

CSSの「カスケード(段階)」が指している仕組みとして、最も適切なものはどれか。

正解は 3番:1つの部分に複数の指定が重なったとき、決まった優先順位で適用するものを決める

すべてのページ共通のCSS、そのページだけのCSS、タグに直接書いた指定が、1つの部分に同時に当たることがあります。カスケードは、こうして重なった指定のどれを採るかを決める仕組みです。おおまかには、当てる範囲が狭い指定ほど強くなります。この仕組みがあるので、全体の決まりを作って例外だけを書き足せます。

ほかの選択肢は

上の要素から下へ性質が伝わることは継承と呼ばれ、カスケードとは別の仕組みです。画面幅に応じて見せ方を変えるのはメディアクエリ、読み込みの順を変えるのは表示速度の工夫で、どちらもカスケードが指しているものではありません。

「CSS」の解説を読む →

問30

HTMLに対するCSSと同じ関係で、XMLの見せ方を指定するために用いられる言語はどれか。

正解は 3番:XSL

XSLは、XMLで書かれたデータをどう見せるかを指定するための言語です。CSSが「この部分をこう見せる」と指定するのに対し、XSLは別の形へ作り変えることまでできます。XMLで持っているデータを、表示用のHTMLへ変換するといった使い方をします。

ほかの選択肢は

DTDはXMLやHTMLで使ってよいタグの構造を定める文書型定義、SOAPはWebサービスどうしがやり取りする手順、SAXはXMLを先頭から順に読んでいく読み取り方の名前です。いずれも見せ方を指定するものではありません。

「CSS」の解説を読む →

問31

XML文書が「整形式(well-formed)である」と「妥当(valid)である」の関係として、最も適切なものはどれか。

正解は 4番:妥当な文書は必ず整形式でもあるが、整形式でも妥当とは限らない

整形式は、タグが正しく閉じている、入れ子が交差していないなど、XMLの文法そのものを守っている状態です。妥当は、そのうえで、DTDやXML Schemaであらかじめ決めた構造にも合っている状態を指します。妥当であるためには文法を守っていることが前提なので、妥当ならば必ず整形式です。

ほかの選択肢は

関係を逆にすると成り立ちません。文法は正しいが決めた構造に合っていない文書は、整形式ではあっても妥当ではありません。2つは段階の違う言葉で、同じ意味でも無関係でもありません。

「XML」の解説を読む →

問32

XMLを読み取る方式のうち、SAXの特徴として最も適切なものはどれか。

正解は 1番:先頭から順に読み進めるので記憶領域は少なくて済むが、通り過ぎた箇所へは戻れない

SAXは、文書を先頭から順に読み、タグが現れるたびにその場で処理します。読んだそばから捨てられるので記憶領域が少なくて済みますが、手元に残らないため、通り過ぎたところへは戻れません。大きいファイルを順に処理していく場面に向きます。

ほかの選択肢は

全体を木として組み立ててから扱うのはDOMで、SAXとは正反対の性格です。使ってよいタグの構造を定義する記法はDTDやXML Schema、表示用に変換する言語はXSLで、どちらも読み取り方式の名前ではありません。

「XML」の解説を読む →

問33

同じ内容のデータをXMLとJSONで表したとき、JSONのほうが短くなる主な理由として、最も適切なものはどれか。

正解は 3番:項目名を開始タグと終了タグの2回書かず、1回で済ませられるから

XMLでは項目名を開始タグと終了タグで2回書きます。JSONは名前と値の組なので、項目名は1回で済みます。項目が何千件もあると、この差がそのまま通信量の差になります。Webのやり取りでJSONが主流になったのは、この短さが理由です。

ほかの選択肢は

JSON自体に圧縮の仕組みはなく、数値も人が読める10進数で書きます。改行や空白も自由に入れられます。短くなるのは書き方の決まりによるもので、データの表し方を変えているからではありません。

「JSON」の解説を読む →

問34

JSONとJavaScriptの関係として、最も適切なものはどれか。

正解は 3番:JSONはJavaScriptの書き方をもとにしたデータの記述形式で、ほかの言語からも読み書きできる

JSONという名前はJavaScript Object Notationの略で、JavaScriptのオブジェクトの書き方をもとにしています。ただし形式としては特定の言語に縛られず、RFCやECMAの規格として定められています。Java、Python、C#など、どの言語にも読み書きの仕組みが用意されています。

ほかの選択肢は

JavaScript以外で扱えないということはなく、言語をまたいでデータを受け渡せることが選ばれる理由になっています。JSONはデータの書き方であって、処理を書く言語でも実行環境でもありません。名前が似ているだけの無関係なものでもなく、もとになった関係があります。

「JSON」の解説を読む →

問35

Ajaxにおける「非同期(Asynchronous)」の意味として、最も適切なものはどれか。

正解は 4番:サーバからの返事を待たずに、ほかの処理を進められること

同期であれば、要求を出したら返事が来るまで次へ進めません。非同期では、要求を出したあとも画面は動き続け、返事が届いた時点であらかじめ決めておいた処理が走ります。利用者から見ると、通信のあいだも待たされずに操作できる、という形で現れます。

ほかの選択肢は

複数のサーバへ同時に送ることや、時刻を合わせないことを指す言葉ではありません。要求した順に返事が届かないことがあるのは非同期通信で起こりうる現象ですが、非同期という語そのものの意味は「返事を待たずに進む」ことです。

「Ajax」の解説を読む →

問36

Ajaxで、ブラウザがサーバと裏側でデータをやり取りするために用いられてきたものはどれか。

正解は 2番:XMLHttpRequest

XMLHttpRequestは、表示中のページを読み込み直さずに、ブラウザがサーバへ要求を送って結果を受け取るための仕組みです。Ajaxはこれを中心に、HTML・CSS・DOM・JavaScriptを組み合わせて作られます。いまは後継としてFetch APIも使われています。

ほかの選択肢は

XML SchemaはXMLの構造を定める記法、XSLはXMLの見せ方を指定する言語、SGMLはHTMLのもとになった汎用のマークアップ規格です。いずれもブラウザとサーバの通信を担うものではありません。

「Ajax」の解説を読む →

問37

手続きの引数の渡し方として参照呼出しを用いた場合、手続きの中で引数の値を書き換えると、呼び出し元の変数はどうなるか。

正解は 1番:書き換えられた値になる

参照呼出しでは、値の複製ではなく、変数が置かれている場所そのものを渡します。手続きの中で書き換えると、呼び出し元の変数を直接書き換えたことになります。

ほかの選択肢は

呼び出す前の値のまま変わらないのは値呼出しのほうで、こちらは値の複製を渡すため、手続きの中で何をしても呼び出し元には届きません。元に戻ることも、処理系ごとに変わることもありません。どちらの渡し方かで、呼び出し元に影響するかどうかが決まります。

「値呼出しと参照呼出し」の解説を読む →

問38

配列と比べたときの、単方向リストの性質として適切なものはどれか。

正解は 2番:途中への挿入や削除は少ない手数で済むが、先頭からn番目の要素を取り出すには順にたどる必要がある

単方向リストは、要素ごとに次の要素の場所を持っています。途中へ挟むときは、前の要素の「次」を書き換えるだけで済み、後ろの要素には手を触れません。そのかわり、n番目を取り出すには先頭から順にたどることになります。

ほかの選択肢は

後ろの要素をずらす必要があり、n番目を計算で求められるのは配列のほうです。置く場所が連続していなければならないのも配列で、リストはばらばらの場所に置けるかわりに、次の場所を指すポインタのぶんだけ領域が余分に要ります。手数が同じになることはなく、得意なことがちょうど入れ替わっています。

「リスト構造とポインタ」の解説を読む →

問39

文字列「ABCD」について、部分列と部分文字列の違いを正しく説明しているものはどれか。

正解は 4番:部分列は連続していなくてよく、部分文字列は連続していなければならない

部分列は、元の並び順を保ったまま文字をいくつか取り出した列で、取り出す位置が離れていてもかまいません。ABCDに対するACは部分列です。部分文字列は連続した部分だけなので、ACは部分文字列になりません。

ほかの選択肢は

2つを入れ替えた選択肢が誤りです。文字数の上限で分けるものでもありません。どちらも順番を入れ替えることはできないので、ABCDに対するDAはどちらにも当たりません。

「部分列と最長共通部分列」の解説を読む →

問40

動的計画法が効果を発揮するための条件として、最も適切なものはどれか。

正解は 1番:同じ小さい問題が何度も現れ、その答えから大きい問題を組み立てられること

動的計画法は、小さい問題の答えを表に記録して使い回す解き方です。効くのは、同じ小さい問題が何度も出てくるときと、部分の答えから全体の答えを組み立てられるときです。重複が無ければ、記録する手間だけが増えます。

ほかの選択肢は

半分ずつに分割して互いに無関係な問題として解くのは分割統治法の考え方です。その場で良く見える選択を続けるのは貪欲法で、過去の選択を見直さない点が違います。

「動的計画法」の解説を読む →

問41

配列とリスト構造の選び分けとして、最も適切なものはどれか。

正解は 2番:番号で取り出す回数が多いなら配列、途中への出し入れが多いならリスト構造が向く

配列は連続した場所に並ぶので、番号から位置が計算でき、何番目でも同じ速さで取り出せます。途中に割り込ませるときは後ろを全部ずらす必要があります。リスト構造はつながりを書き換えるだけで割り込めますが、番号で取り出すには先頭からたどります。

ほかの選択肢は

2つを入れ替えた選択肢が誤りです。同じ速さで動くわけでもありません。件数の多少で使える入れ物が決まるものでもなく、どちらも件数にかかわらず使えます。

「配列と二次元配列」の解説を読む →

問42

試験の擬似言語で書かれた処理を読むときに、最初に確かめるべきこととして最も適切なものはどれか。

正解は 2番:配列の添字が何から始まるか

擬似言語の配列は、断りがなければ添字が1から始まります。問題文に「0から始まる」と書かれていれば、そちらに従います。ここを取り違えると、たどった値がすべて1つずれるため、最初に確かめる価値があります。

ほかの選択肢は

行数、変数名の書き方、コメントの数は、処理の結果に影響しません。確かめる価値があるのは、ほかに繰返しが前判定か後判定か、引数の渡し方が値か参照か、といった結果を変える条件です。

「擬似言語」の解説を読む →

問43

正規表現の `*` と `+` の違いとして、最も適切なものはどれか。

正解は 1番:`*` は直前の形の0回以上の繰返しを表し、`+` は1回以上の繰返しを表す

`*` は0回でも当てはまるので、`[0-9]*` は空の入力にも一致します。`+` は1回以上が必要なので、`[0-9]+` には数字が少なくとも1文字必要です。必須の項目を調べるときに `*` を使うと、空の入力が通ってしまいます。

ほかの選択肢は

2つを入れ替えた選択肢が誤りです。任意の1文字を表すのは `.` で、数字1文字は `[0-9]` と書きます。同じ意味でもないので、入力チェックでは使い分けが必要になります。

「正規表現」の解説を読む →

問44

幅優先探索が最短の経路を保証する理由として、最も適切なものはどれか。

正解は 1番:手数の少ない順に調べるので、初めて到達した時点でそれより短い経路は無いため

幅優先探索は、1手で行ける場所をすべて調べ、次に2手で行ける場所をすべて調べる、という進み方をします。ゴールに初めて届いた時点で、それより少ない手数の経路はすべて調べ終わっているので、最短になります。

ほかの選択肢は

調べた場所の記録は、同じ場所を繰り返し調べないための工夫で、最短を保証する理由そのものではありません。行き止まりから戻って試すのは深さ優先探索の進み方です。あらかじめ並べ替える処理も行いません。

「幅優先探索と深さ優先探索」の解説を読む →

この結果の使い方

間違えた用語は復習リストに自動でたまります。 用語ページのミニクイズで正解し直すと、リストから消えます。 記録は自分のブラウザ内(localStorage)にのみ保存され、サーバーには送信していません。

ほかの単元のミニテストを見る →