Answers:
并非每对函数都可与表示法相提并论;考虑功能˚F (Ñ )= Ñ和 克(Ñ )= { 1 ,如果 Ñ 是奇数,Ñ 2 如果 Ñ 是偶数。 而且,像g (n )这样的函数实际上是随着算法的运行时间而出现的。考虑一下显而易见的蛮力算法,以确定给定的整数n是否为质数:
IsPrime(n):
for i ← 2 to (n-1)
if i·⌊n/i⌋ = n
return False
return True
当n为偶数O (√时,此算法需要算术运算操作时,ñ是复合材料,但Θ(ñ)操作时,ñ是素数。因此,从形式上讲,该算法与使用 √的算法无可比拟每n个n个算术运算。
在大多数时候,当我们分析算法时,对于某些相对简单的函数f,我们只想要形式的渐近上限。例如,大多数教科书会简单(正确地)报告以O (n )算术运算运行。典型的上限函数是指数,多项式和对数的乘积(尽管偶尔还会出现阶乘和迭代对数之类的奇异野兽)。不难证明任何两个这样的功能都是可比较的。IsPrime(n)
另请参见此MathOverflow问题。
从维基百科,大O符号的定义:
当且仅当存在一个正常数M使得对于所有足够大的值,f (x )的 绝对值最大为M乘以g (x )。即,˚F (X )∈ Ô (克(X ))当且仅当存在一个正实数中号和实数X 0,使得
对于不收敛的函数(常数或无穷大)会发生什么?
看一下函数,且g (x )= 10
对于每个,有一些X > X 0,使得X = ķ π,从而˚F (X )= 0 -因此每个中号 - 中号˚F (X )> 克(X )将产生假,和克(X )
但是,很容易看到通过任何常数为每个是无界为好,因此中号,X 0,有一些X > X 0,使得˚F (X )< 中号克(X )也将产生假,和˚F (X )∉ Ô (克(x ))
注意:对于定义而言,如果大O允许和g (x )之间存在最大常数差,则将g (x )= log (x )应用于相同的想法
结果是在算法分析中出现的任何两个“简单”功能都是可比的。这里的“简单”是指没有按大小写定义(除了有限的基本情况以外),并且没有出现令人惊讶的函数,例如Ackermann逆函数有时会在运行时间计算出来。