漸近表記
1.定義
漸近表記は、定義された自然数N = {0、1、2 、......}関数の定義域に基づいて、漸近実行タイムマークを記述するために使用されます。通常、アルゴリズムの計算時間を記述するために漸近表記を使用します。次に、いくつかの基本的な漸近表記を紹介します。
2. Oマーク(big-Oh)
2.1定義
f(n)= O(g(n)) -定数c> 0およびn0が存在し、n> = n0に対してf(n)<c * g(n)となります。
任意のn> = n0に対して、f(n)<= c * g(n)となるような正規数cとn0があります。
O表記を使用して、関数の定数係数内に上限を指定することがよくあります。ここで、g(n)は、漸近境界ではなく、漸近上限である必要があります(つまり、3n ^ 2 + 4n + 5 = O (n ^ 2)が成り立ちますが、実際には3n ^ 2 + 4n + 5 = O(n ^ 1000000)も成り立ちます)。
2.2例
2.2.1一般的な例
- 3n ^ 2 + 4n + 5 = O(n ^ 2)
- log10 n = O(log2 n)= O(log n)(デフォルトではlogは基数2です)
- sin n = O(1)
- 10 ^ 10 = O(1)
- nΣi= 1 i ^ 2 = O(n ^ 3)
- nΣi= 1 i = O(n ^ 2)
- log(n!) = log(n)+……+ log(1)= O(n log n)
- nΣi= 1 1 / i = O(log n)
2.2.2証明例
(1)f(n)= 3n ^ 2 + 4n + 5、f(n)= O(n ^ 2)であることを証明します。
解決策:n> = 1の場合、f(n)= 3n ^ 2 + 4n + 5 <= 3n ^ 2 + 4n ^ 2 + 5n ^ 2 = 12n ^ 2。したがって、定数c = 12およびn0 = 1がある場合、任意のn> = n0に対して、f(n)<= c * n ^ 2
(2)f(n)=nΣi= 1 1 / i、f(n)= O(log2 n)であることを証明します。
PSここで、nΣi= 1 1 / iは1/1 + 1/2 + 1/3 +……+ 1 / nに等しく、調和級数の調和級数が証明に使用されます。
n> = 2の場合、最初にnをnに最も近い2の累乗に増幅できます。f(n)= 1/1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 +……+ 1 /(n-1)+ 1 / n <= 1/1 + 1/2 +1/2 + 1/4 + 1/4 + 1/4 + 1/4 +…… 1 /(n / 2)+ 1 / n = log n + 1 / n <= 2 logn。したがって、定数c = 2およびn0 = 2があります。任意のn> = n0の場合、f(n)<= c * lognです。ズームインした後、f(n)= O(log n)、明らかにズームインしていないときは、f(n)= O(log n)も真です。
2.2.3反例の証明
(1)f(n)= 2 ^(2n)がO(2 ^ n)と等しくないことを証明します。
解決策:反例は、任意の正規数cおよびn0に対して、n> = n0が存在することを証明することです。したがって、f(n)> c * g(n)です。したがって、この質問では、任意の自然数cとn0に対して、n = n0 + log c> = n0が存在するため、f(n)> c * 2 ^ nとなります。
3.Ω記号(ビッグオメガ)
3.1定義
f(n)=Ω(g(n))定数c> 0およびn0が存在し、n> = n0に対してf(n)> = c * g(n)となります。
任意のn> = n0に対して、f(n)> = c * g(n)となるような正規数cとn0があります。
Ω表記は、関数の漸近的な下限を提供します。
3.2例
3.2.1一般的な例
- n ^ 2 / 2-3n =Ω(n ^ 2)
- log(n!)=Ω(nlog n)
- nΣi= 1 1 / i =Ω(log n)
3.2.2証明例
(1)f(n)= n ^ 2 / 2-3n、f(n)=Ω(n ^ 2)であることを証明します。
解決策:n> = 12の場合、f(n)= n ^ 2 / 2-3n> = n ^ 2/4です。したがって、正規数c = 1/4とn0 = 12があるため、任意のn> = n0、f(n)> = c * n ^ 2。
(2)f(n)= log(n!)、f(n)=Ω(nlog n)であることを証明します。
解決策:n> = 4の場合、f(n)= log(n)+ log(n-1)+……+ log 1> = log(n)+ log(n-1)+……+ log(n / 2)> = n / 2 * log(n / 2)= n / 2 *(log n-1)> = n log n / 4。したがって、正規数c = 1/4およびn0 = 4があるため、任意のn> = n0に対して、f(n)> = c * n lognとなります。
(3)f(n)=nΣi= 1 1 / i、f(n)=Ω(logn)であることを証明します。
解決策:n> = 2の場合、nをnに最も近い2の累乗に減らすことができます。f(n)= 1/1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 +……+ 1 /(n-1)+ 1 / n> = 1/2 + 1/4 + 1/4 + 1/8 + 1/8 + 1/8 + 1/8 + .. 。+ 1 / n + 1 / n> = n log n / 2 + 1 / n> = n log n / 2。したがって、正規数c = 1/2とn0 = 2があり、任意のn> = n0に対して、f(n)> = c * n lognとなります。
3.2.3反例の証明
(1)100n ^ 2がΩ(n ^ 3)と等しくないことを証明します。
解決策:反例は、任意の正規数cおよびn0に対して、n> = n0が存在することを証明することです。したがって、f(n)<c * g(n)です。したがって、この質問では、任意の正規数cおよびn0に対して、n = n0 + 100 / c> = n0が存在するため、f(n)<c * n ^ 3となります。
4.シータ表記(ビッグシータ)
4.1定義
f(n)= O(g(n))およびf(n)=Ω(g(n))の場合に限り、f(n)=θ(g(n))
θ(g(n))の定義では、すべてのメンバーf(n)∈θ(g(n))が漸近的に非負であり、g(n)がf(n)の漸近的にコンパクトな境界である必要があります。