例 1 の試みられた証明は善意に見えますが、欠陥があります。まず、「<code>2^f(n) ≤ 2^C1 g(n)」は を意味します2^f(n) ≤ (2^C1)*g(n)
が、これは一般に誤りです。書かれているはずです2^f(n) ≤ 2^(C1*g(n))
。「Now」で始まる行では、明示的に言う必要がありますC2 = 2^C1
。「(ii) が真になる」という主張は空虚です ((ii) はありません)。
f(n) = 1/n
すべての n > N に対して f(n) < C*(f(n))² となるような定数 N と C は存在しないため、関数 likeは例 2 の主張を反証します。証明: いくつかの N と C が与えられているとします。n>N、n>C を選択します。f(n) = 1/n = n*(1/n²) > C*(1/n²) = C*(f(n))²。N と C は任意に選択されたので、これは、すべての n > N に対して f(n) < C*(f(n))²、QED となるような N と C の固定値がないことを示しています。
「f(n) ≥ 1」と言うだけでは、2 番目の主張を証明するのに十分ではありません。しかし、「すべての n について f(n) ≥ 1」または「f() ≥ 1」と書けば、証明可能です。たとえば、f(n) = 奇数 n の場合は 1/n、偶数 n の場合は 1+n の場合、偶数 n > 0 の場合は f(n) > 1、奇数 n の場合は 1 未満になります。f(n) = O((f(n))²) が偽であることを証明するには、前の段落と同じ証明を使用しますが、n が偶数であるという追加条件を使用します。
実際、「すべての n について f(n) ≥ 1」は、f(n) = O((f(n))²) を保証するために必要以上に強力です。ε を任意の正の固定値とします。ε がどんなに小さくても、「すべての n > N' に対して f(n) ≥ ε」により、f(n) = O((f(n))²) が保証されます。これを証明するには、C = max(1, 1/ε) と N=N' を取ります。