漸近記法ドリル
目的
第4章「漸近記法」を定着させるための追加問題です。結論だけでなく、反復回数、総和、再帰式、または定義からの証明を書いてください。
難易度ラベル
- [A] 基本: 定義を読む・単純計算をする。
- [B] 標準: 複数の定義を組み合わせる。
- [C] 発展: 証明・設計・実装の説明が必要。
- [D] 実装: 実行可能なコードまたは明確な擬似コードが必要。
- [E] 接続: 本体教科書の概念へ橋渡しする。
A. 定義から示す
- [A][漸近記法]
3n+7 = O(n)を定義から示せ。 - [A][漸近記法]
n^2+100n+1 = O(n^2)を定義から示せ。 - [A][漸近記法]
10n^3+n = Θ(n^3)を示せ。 - [A][漸近記法]
n = O(n log n)をn≥2で説明せよ。 - [A][漸近記法]
log n = O(n)を説明せよ。 - [A][漸近記法]
n^2はO(n)ではないことを示せ。 - [A][漸近記法]
2n^2+3n = Ω(n^2)を示せ。 - [A][漸近記法]
n log n = Ω(n)をn≥2で説明せよ。
B. 増加率を比較する
- [B][漸近記法]
n,log n,n^2,n log n,2^n,1を小さい順に並べよ。 - [B][漸近記法]
n^3,n!,2^n,n^2 log n,log^2 nを小さい順に並べよ。 - [B][漸近記法]
1000000nと0.001n^2は、漸近的にはどちらが大きいか。 - [B][漸近記法]
n^10と2^nは、漸近的にはどちらが大きいか。
C. ループ解析
- [B][漸近記法] 次の計算量を求めよ。
for i = 1 to n:
constant_work()
- [B][漸近記法] 次の計算量を求めよ。
for i = 1 to n:
for j = 1 to n:
constant_work()
- [B][漸近記法] 次の計算量を求めよ。
for i = 1 to n:
for j = 1 to i:
constant_work()
- [B][漸近記法] 次の計算量を求めよ。
for i = 1 to n:
j = 1
while j < n:
j = 2 * j
- [C][漸近記法] 次の計算量を求めよ。
i = n
while i > 1:
i = floor(i / 3)
- [C][漸近記法] 次の計算量を求めよ。
for i = 1 to n:
for j = 1 to n:
for k = 1 to n:
constant_work()
D. 再帰式
- [C][漸近記法]
T(n)=T(n/2)+1の解を求めよ。 - [C][漸近記法]
T(n)=2T(n/2)+nの解を求めよ。 - [C][漸近記法]
T(n)=T(n-1)+1の解を求めよ。 - [C][漸近記法]
T(n)=T(n-1)+nの解を求めよ。 - [C][漸近記法]
T(n)=2T(n-1)+1は多項式時間か。理由を述べよ。
代表解
- 13:
Θ(n)。 - 14:
Θ(n^2)。 - 15:
Θ(n^2)。総反復回数はn(n+1)/2。 - 16: 外側
n回、内側Θ(log n)回なのでΘ(n log n)。 - 17:
Θ(log n)。 - 18:
Θ(n^3)。 - 19:
Θ(log n)。 - 20:
Θ(n log n)。 - 21:
Θ(n)。 - 22:
Θ(n^2)。 - 23: 指数的。各段で呼び出しが2倍になるため、多項式時間ではない。