(O与Ω的一些变形)某些作者用一种与我们稍微不同的方式来定义Ω;假设我们使用(读作“Ω无穷”)来表示这种可选的定义。若存在正常量c,使得对无穷个整数n,有
,则称
。
a. 证明:对渐近非负的任意两个函数f(n)和g(n),或者f(n)=O(g(n))或者或者二者均成立,然而,如果使用Ω来替代
,那么该命题并不为真。
b. 描述用代替Ω来刻画程序运行时间的潜在优点和缺点。
某些作者也用一种稍微不同的方式来定义O;假设使用O'来表示这种可选的定义。我们称f(n)=O'(g(n))当且仅当。
c. 如果使用O'代替O但仍然使用Ω,定理3.1中的“当且仅当”的每个方向将出现什么情况?有些作者定义(读作“软O”)来意指忽略对数因子的O:
{ f(n): 存在正常量c,k和
,使得对所有
,有
}
d. 用一种类似的方式定义和
。证明与定理3.1相对应的类似结论。
解答:
a. 先证明命题:对渐近非负的任意两个函数f(n)和g(n),或者f(n)=O(g(n))或者或者二者均成立。
我们分别来看O和“Ω无穷”的定义:
O(g(n)) = { f(n): 存在正常量c和,使得对所有
,有
}
(g(n)) = { f(n): 存在正常量c,使得对无穷个整数n,有
}
根据命题,我们将 O(g(n)) 记为A,将 (g(n)) 记为B,简化为A||B||(A&&B)始终为真,由此可以简化等价为 !(!A&&!B) 为真,也就是说,不可能存在A为假并且B为假的情况。
由此我们分两步证明,假定A为假与假定B为假。
1. 假定A为假,那么按照定义,我们不管怎么取正常量c和,都无法满足定义。说明当n趋向无穷大时,必然出现整数满足
,且必须为无穷个,因为如果是有穷个,那么可以让最大的那个n作为
来满足A定义。可以得证当A为假时,B必为真。
2. 假定B为假,即只能对有穷个整数n,有,那么取有穷个整数n的最大值作为
,有
,符合A的定义,可知当B为假时,A必为真。
于是命题成立。
接下来证明如果使用Ω来替代,那么该命题并不为真。即用Ω用来指代B。以下是论证过程。
论证 !(!A&&!B)结果有可能为假。可以用反证法,我们列举一个函数,tan(n),该函数无法被O和Ω渐进函数表达。所以命题不成立。
得证。
b. 描述用代替Ω来刻画程序运行时间的潜在优点和缺点。
解答
最大的有点是它和O结合使用,即可以覆盖所有的函数。缺点是它无法精确描述一个函数的渐进下界。
c. “当且仅当”需要追加一个f(n)>=0 。
d. 定义如下:
软O(g(n)) = { f(n): 存在正常量c,k和n0,使得对所有n>=n0,有 0<=f(n)<=cg(n)lg^k(n) }
软Ω(g(n)) = { f(n): 存在正常量c,k和n0,使得对所有n>=n0,有 0<=cg(n)lg^k(n)<=f(n) }
软θ(g(n)) = { f(n): 存在正常量c1,c2,k1,k2,和n0,使得对所有n>=n0,有 0<=c1g(n)lg^k1(n)<=f(n)<=c2g(n)lg^k2(n) }
定理3.1类似结论:对任意两个函数f(n)和g(n),我们有f(n)=软θ(g(n))当且仅当f(n)=软O(g(n))且f(n)=软Ω(g(n))。