関数は常に漸近的に比較可能ですか?


15

2つのアルゴリズムの複雑さを比較するとき、通常はまたはg n = O f n (おそらく両方)の場合です。ここでfg 2つのアルゴリズムの(たとえば)実行時間です。f(n)=O(g(n))g(n)=O(f(n))fg

これは常にそうですか?つまりは、関係の少なくともいずれかを行いG N = O F N の一般的な機能のためには常に保持、FG?そうでない場合、どの仮定を行う必要がありますか?(なぜ)アルゴリズムの実行時間について話すときにそれは大丈夫ですか?f(n)=O(g(n))g(n)=O(f(n))fg

回答:


21

関数のすべてのペアが表記と比較できるわけではありません。機能を考慮fはN = NG N = { 1 た場合  、N  奇数でnは2 あれば  nは  偶数です さらに、g n )のような関数は、アルゴリズムの実行時間として実際に発生します。明らかなブルートフォースアルゴリズムを検討して、指定された整数nが素数かどうかを判断します。O(f(n)=n

g(n)={1if n is odd, n2if n is even.
g(n)n
IsPrime(n):
  for i ← 2 to (n-1)
     if i·⌊n/i⌋ = n
        return False
  return True

このアルゴリズムは、必要場合演算をnは偶数であり、O Θ(1)nnが複合の場合の演算。ただし、nが素数の場合のΘn演算。したがって、正式には、このアルゴリズムはを使用するアルゴリズムと比較できませんO(n)nΘ(n)nのための演算処理毎にNn n

ほとんどの場合、アルゴリズムを分析するとき、比較的単純な関数fに対して形の漸近的な上限のみが必要です。たとえば、ほとんどの教科書は、O n 算術演算で実行されるレポートを単純に(そして正しく)報告します。典型的な上限関数は、指数、多項式、および対数の積です(ただし、階乗や反復対数などのよりエキゾチックな獣も時々現れます)。このような2つの関数が同等であることを証明するのは難しくありません。O(f(n))fIsPrime(n)O(n)

このMathOverflowの質問も参照してください。


7

ウィキペディアから、ビッグO表記の定義:

すべての十分に大きい値について、f x が最大でMにg x )の 絶対値で乗算されるような正の定数Mが存在する場合にのみ。すなわち、F X O G X であれば、正の実数が存在する場合にのみ、Mおよび実数X 0となるようにxf(x)g(x)f(x)O(g(x))Mx0

|f(x)|<=M|g(x)|for allx>x0

(定数にも無限にも)収束しない関数ではどうなりますか?

関数見てくださいx s i n x | 、およびg x = 10f(x)=|xsin(x)|g(x)=10

x0x>x0x=kπf(x)=0MMf(x)>g(x)g(x)O(f(x))

|xsin(x)|Mx0x>x0f(x)<Mg(x)f(x)O(g(x))

Mf(x)g(x)g(x)=log(x)


6

Here's a pair monotonic functions that are not asymptotically comparable. This is relevant because most complexities arising in practice are in fact monotonic.

f(x)=Γ(x+1)=x!
g(x)=Γ(x1/2+3/2)

Here, Γ is the gamma function. The second function is specially constructed to be very similar to the factorial, just "sampled" at slightly offset points in the gamma function. The functions cross each other periodically in such a way that neither is asymptotically bound by the other.


4

Let L be the class of functions obtained from the identity function and constants using the following operations: addition, subtraction, multiplication, division, logarithm and exponential. For example, exp(2logx+loglogx)/x2. Hardy proved that for every two functions f,gL which are positive and tend to infinity, one of the following is true: f=o(g), f=ω(g), f/g tends to a constant. See page 18 of his book "Orders of infinity".

The upshot is that any two "simple" functions occurring in the analysis of algorithm are comparable. Here "simple" means that there is no definition by cases (other than finitely many base cases), and no surprising functions appear, such as the inverse Ackermann function which sometimes figures in running times.


Nice! It is noteworthy, though, that periodic elements occur frequently in average case analysis (of d&c algorithm). The one I know are bound on both sides by constants, so they don't hurt asymptotic comparability.
Raphael
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.