応用情報技術者 2009年 秋期 午前2 問05
問題文
n個の要素 、から成る連結リストに対して、新たな要素 の末尾への追加に要する時間をとし、末尾の要素の削除に要する時間をとする。
が非常に大きいとき、実装方法1と実装方法2におけるの挙動として、適切なものはどれか。


選択肢
ア:
イ:(正解)
ウ:
エ:
連結リストの末尾追加と削除時間の比率【午前2 解説】
要点まとめ
- 結論:実装方法1は末尾削除が、末尾追加がで比率はほぼ1、実装方法2は末尾削除が、追加がで比率はに比例します。
- 根拠:実装方法1は末尾ポインタがなく末尾探索が必要、実装方法2は末尾ポインタがあり追加は定数時間、削除は先頭から探索が必要です。
- 差がつくポイント:末尾ポインタの有無で追加操作の時間が大きく変わり、削除操作はどちらも末尾探索が必要なためです。
正解の理由
イが正解です。実装方法1は末尾ポインタがないため、末尾追加も削除もリストの先頭から末尾まで探索が必要で、ももで比率はほぼ1になります。一方、実装方法2は末尾ポインタrearがあるため、末尾追加はで済みますが、末尾削除は先頭から末尾の一つ前を探す必要がありです。したがってはに比例します。
よくある誤解
末尾ポインタがあれば末尾削除もになると誤解しがちですが、単方向リストでは末尾の一つ前の要素を知る手段がなく、削除はです。
解法ステップ
- 実装方法1の構造を確認し、末尾ポインタがないことを理解する。
- 末尾追加は末尾まで探索が必要で、末尾削除も同様に。
- 実装方法2は末尾ポインタrearがあり、追加はで可能。
- しかし削除は単方向リストのため、末尾の一つ前を探す必要があり。
- それぞれのとの時間計算量を比較し、比率を求める。
選択肢別の誤答解説
- ア:両方とも比率が1になるとあるが、実装方法2は追加がで削除がなので誤り。
- イ:正解。実装方法1は比率1、実装方法2は比率に比例。
- ウ:実装方法1が比率に比例は誤り。末尾追加も削除もで比率は1。
- エ:両方とも比率に比例は誤り。実装方法1は比率1。
補足コラム
単方向連結リストで末尾操作を高速化するには、末尾ポインタを持つことが重要です。ただし、末尾削除は単方向リストでは前の要素を辿る必要がありです。双方向リストならば末尾削除もで可能です。
FAQ
Q: 末尾ポインタがあれば末尾削除はなぜにならないのですか?
A: 単方向リストでは末尾の一つ前の要素を知る手段がなく、削除時に先頭から辿る必要があるためです。
A: 単方向リストでは末尾の一つ前の要素を知る手段がなく、削除時に先頭から辿る必要があるためです。
Q: 末尾追加はなぜ実装方法1でかかるのですか?
A: 末尾ポインタがないため、追加時に先頭から末尾まで辿って最後に追加する必要があるからです。
A: 末尾ポインタがないため、追加時に先頭から末尾まで辿って最後に追加する必要があるからです。
関連キーワード: 連結リスト、単方向リスト、末尾追加、末尾削除、時間計算量、ポインタ、データ構造

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

