1.やさしい
再帰とは何ですか?
- Aデータ構造の一種
- Bより小さな入力に対して自分自身を呼び出す関数
- Cソートの手法の一つ
- D決して終わらないループ
2.やさしい
ある O(n) アルゴリズムは n = 100 万で 3 秒かかります。n = 200 万ではおよそ何秒かかりますか?
- A6 秒
- B12 秒
- C3 秒
- D9 秒
3.やさしい
メモ化(memoisation)とは何ですか?
- A関数が戻った後にメモリを解放すること
- Bコードの各行の横にコメントを書くこと
- C再帰を自動的に等価なループに変換し、コールスタックを不要にすること
- D関数呼び出しの結果を保存し、同じ呼び出しにはメモリから答えること
4.ふつう
漸化式 T(n) = 2T(n − 1) + O(1) の解は何ですか?
- AO(n log n)
- BO(n)
- CO(2ⁿ)
- DO(n²)
5.ふつう
V 個の頂点と E 本の辺をもつグラフに対するベルマン-フォード法の時間計算量は何ですか?
- AO(V³ × E)
- BO(V × E)
- CO(E log V)
- DO(V + E)
6.ふつう
動的計画法(dynamic programming)が有効なのは、問題が次の性質を持つときです。
- Aループが一つだけ
- Bランダムな入力のみ
- C重複する部分問題と最適部分構造
- D部分問題がまったくないので、1 ステップで解ける
7.むずかしい
挿入ソートはソート済みの入力に対して O(n) で動作します。これは比較ソートの Ω(n log n) の下界と矛盾しますか?
- Aはい。したがって下界は誤りである
- Bはい。ただし 100 より短い配列の場合に限る
- Cいいえ。下界はすべての入力にわたる最悪の場合に適用されるのであって、すべての入力に適用されるわけではない
- Dいいえ。挿入ソートは比較ソートではないから
8.むずかしい
どんな入力に対してもクイックソートの期待(expected)実行時間を O(n log n) にする手法はどれですか?
- A常に先頭の要素を選ぶ
- Bクイックソートを実行する前に入力をソートする
- C左側にのみ再帰を使う
- Dピボットを一様ランダムに選ぶ
解答
- 1. B · より小さな入力に対して自分自身を呼び出す関数
- 2. A · 6 秒
- 3. D · 関数呼び出しの結果を保存し、同じ呼び出しにはメモリから答えること
- 4. C · O(2ⁿ)
- 5. B · O(V × E)
- 6. C · 重複する部分問題と最適部分構造
- 7. C · いいえ。下界はすべての入力にわたる最悪の場合に適用されるのであって、すべての入力に適用されるわけではない
- 8. D · ピボットを一様ランダムに選ぶ
ステップごとの詳しい解答:このトピックは examproblems.com で練習できます。