平成21年度秋期 問5 / 80

平成21年度 秋期 応用情報技術者試験 午前 問5

n個の要素x₁,x₂,…,xₙから成る連結リストに対して,新たな要素xₙ₊₁の末尾への追加に要する時間をf(n)とし,末尾の要素xₙの削除に要する時間をg(n)とする。nが非常に大きいとき,実装方法1と実装方法2における g(n)/f(n) の挙動として,適切なものはどれか。

〔実装方法1〕
先頭のセルを指すポインタ型の変数frontだけをもつ。

問題の図

〔実装方法2〕
先頭のセルを指すポインタ型の変数frontと,末尾のセルを指すポインタ型の変数rearを併せもつ。

問題の図

実装方法1 実装方法2
ア ほぼ1になる。 ほぼ1になる。
イ ほぼ1になる。 ほぼnに比例する。
ウ ほぼnに比例する。 ほぼ1になる。
エ ほぼnに比例する。 ほぼnに比例する。

キーボード:1〜4 で解答 → 次の問題 ← 前の問題

正解と解説を見る

正解:イ

それぞれの実装方法で,末尾への追加時間f(n)と末尾の削除時間g(n)を考えます。

  • 実装方法1(frontだけ)
  • 追加: 末尾のセルを見つけるために先頭からn個たどる必要があるので,f(n)はnに比例します。
  • 削除: 末尾の一つ前のセル(xₙ₋₁)のポインタを空にする必要があり,先頭からたどるので,g(n)もnに比例します。
  • したがって g(n)/f(n) は ほぼ1 になります。
  • 実装方法2(frontとrear)
  • 追加: rearから末尾のセルが直接分かるので,f(n)はnによらず一定です。
  • 削除: 単方向リストではrearからxₙ₋₁に戻れないため,先頭からたどる必要があり,g(n)はnに比例します。
  • したがって g(n)/f(n) は ほぼnに比例 します。

  • ア: 実装方法1: ほぼ1,実装方法2: ほぼ1
    誤り。実装方法2では,追加は一定時間でできますが,削除にはnに比例する時間がかかるため,比はnに比例します。

  • イ: 実装方法1: ほぼ1,実装方法2: ほぼnに比例
    正しい。上記のとおり,実装方法1は追加・削除ともnに比例するので比はほぼ1,実装方法2は追加が一定時間・削除がnに比例するので比はほぼnに比例します。

  • ウ: 実装方法1: ほぼnに比例,実装方法2: ほぼ1
    誤り。実装方法1では追加も削除も先頭からたどる必要があり,どちらもnに比例するため,比はほぼ1です。

  • エ: 実装方法1: ほぼnに比例,実装方法2: ほぼnに比例
    誤り。実装方法1の比はほぼ1になります。


答え

イ: 実装方法1: ほぼ1になる,実装方法2: ほぼnに比例する

出典:平成21年度 秋期 応用情報技術者試験 午前 問5

平成21年度秋期の他の問題