━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
データ構造・アルゴリズム論 確認問題2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
●問 (関数のオーダー)

関数 f(n) を f(n) = 2 n^2 + 10n と定義する.

(1) f(n) が2次以下のオーダー O(n^2) であることを証明せよ.

(2) f(n) が3次以下のオーダー O(n^3) であるかどうかを答えよ (証明は不要).

(3) f(n) が1次(線形)以下のオーダー O(n) ではないことを証明せよ.

──────────────────────────────────────

●答 (関数のオーダー)

(1) ある正整数以上の正整数 n で常に f(n) ≦ c n^2 となる,正実数 c を見つける.
正整数 n について常に n ≦ n^2 だから,f(n) = 2 n^2 + 10n ≦ (2+10) n^2.
よって,c=12 とおけば,n≧1 のとき常に f(n) ≦ c n^2.

(2) O(n^3) である.

(3) f(n) が O(n) であると仮定して,矛盾を導く.この仮定と O記法の定義より,
正実数 c が存在し,ある正整数 m 以上の正整数 n について常に f(n) ≦ cn.
ここで,f(n) ≦ cn  ⇔  2 n^2 + 10n ≦ cn  ⇔  n (n-(c/2-5)) ≦ 0.
n = max(m, [c/2-5]+1) のとき,n は m 以上の正整数なので,不等式
n (n - (c/2-5)) ≦ 0 が成り立つ.一方,n の定め方より,n と n-(c/2-5) は共に
正なのでその積 n (n-(c/2-5)) も正であり,この不等式に矛盾する.

※ここで,[x] は x 以上の最小の整数を表す.

[解説]

(1) c の値は,主要項の係数を超える実数を任意に選べばよい.
上記の解答では係数の和である 12 を選んだが,他の c の値も選べる.
例えば,主要項が 2 n^2 なので,c として係数 2 を超える 3 を選べば,
f(n) ≦ c n^2  ⇔  2 n^2 + 10n ≦ 3 n^2  ⇔  n(n-10) ≧ 0 だから,
n≧10 で常に f(n) ≦ c n^2 が成り立つ.

(2) 証明は (1) と同様.「任意の自然数 n について n ≦ n^2 ≦ n^3」を使う.
一般に,2以上のどんな整数 k についても,「O(n^2) の関数は常に O(n^k) である」
を証明できる.O記法は,上から押さえるのに使える(関数値の増え方が同じかより速い)
関数の例を一つ示すだけで,下限を示すものではないことに注意する.

(3) 背理法で証明する以外に,O記法の定義の否定に沿って証明する方法もある.
証明が理解できない場合は,資料集の類似の証明中の解説も読むとよい.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
授業のホームページ

山田 俊行
https://www.cs.info.mie-u.ac.jp/~toshi/