抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

渐近等价

考虑函数: f(x)=x2+4xf(x)=x^2+4x

xx\rightarrow \infty时,该函数可以看作x2x^2与它的高阶无穷小o(x2)o(x^2)之和,即

f(x)=x2+4x=x2+o(x2)f(x)=x^2+4x=x^2+o(x^2)

于是我们称f(x)f(x)x2x^2是渐近等价的,设g(x)=x2g(x)=x^2,那么我们可以用下面的符号表示渐进等价

f(x)g(x)f(x) \sim g(x)

更一般地,如果存在两个函数f(x)f(x)g(x)g(x),使得下面式子成立

f(x)=g(x)+o(g(x))f(x)=g(x)+o(g(x))

就称f(x)f(x)g(x)g(x)渐进等价

你也可以用极限的方法来判断两个函数是否渐近等价

limxf(x)g(x)=1\lim\limits_{x\rightarrow \infty}\frac{f(x)}{g(x)}=1

我们可以轻而易举地得到一个结论:f(x)f(x)总是跟自己渐近等价

f(x)f(x)f(x) \sim f(x)

渐近上界

若对于函数f(n)f(n),g(n)g(n),存在cckk,使得

c>k0f(n)cg(n)c>k \rightarrow 0\leq f(n) \leq cg(n)

即从kk开始,f(n)f(n)永远无法超过cg(n)cg(n),则称g(n)g(n)f(n)f(n)的渐近上界,写作

f(n)=O(g(n))f(n)=O(g(n))

注意O(g(n))O(g(n))表示的是一个集合,它代表了所有以g(n)g(n)为渐近上界的函数,此处的等于号是用于指出f(n)f(n)是所有以g(n)g(n)为渐近上界的函数里的一员

下面的图片可以帮助你更好的理解f(n)f(n)g(n)g(n)的关系

若选取c=5c=5,则当x>1x>1时,f(n)<5g(n)f(n)<5g(n)

DearXuan

同样的,我们也可以轻易得到一个结论,f(x)f(x)总是自己的渐近上界

f(x)=O(f(x))f(x)=O(f(x))

渐近时间复杂度

设有下面一段函数

1
2
3
4
5
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
swap(i,j);
}
}

外循环共执行了n次,内循环共执行了i次,所以总共执行次数为

S(n)=i=1ni=n2+n2S(n)=\sum\limits_{i=1}^{n}i=\frac{n^2+n}{2}

如果我们把代码改成如下所示

1
2
3
4
5
6
7
8
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
execute1(i,j);
execute2(i,j);
execute3(i,j);
execute4(i,j);
}
}

那么此时算法执行命令的总次数就翻了4倍,随着n的逐渐增大,这两个算法所用时间的增长规模是相似的,并且我们并不需要特别高的精度.因此我们可以用算法执行时间t(n)t(n)的渐近上界f(n)f(n)来表示一个算法的效率

f(n)=O(f(n))=O(12n2+12n)f(n)=O(f(n))=O\left(\frac12n^2+\frac12n\right)

在渐近时间复杂度中,我们只关心执行时间的增长规模,而不关心具体数字,显然以下两个函数的规模是一致的

{f(n)=12n2+12ng(n)=12n2+32n\left\{ \begin{array}{ll} f(n)=\frac12n^2+\frac12n \\\\ g(n)=\frac12n^2+\frac32n \end{array} \right.

因此我们需要对渐近时间复杂度进行化简

函数推导

f(n)=O(g(n))Λg(n)=O(h(n))→f(n)=O(h(n))

根据定义,我们得到

{0f(n)c1g(n),nn10g(n)c2h(n),nn2\left\{ \begin{array}{ll} 0 \leq f(n) \leq c_1g(n),n\geq n_1 \\\\ 0 \leq g(n) \leq c_2h(n),n\geq n_2 \end{array} \right.

合并,得到

0f(n)c1c2h(n),n>max{n1,n2}0 \leq f(n) \leq c_1c_2h(n),n>\max \{n_1,n_2\}

命题得证

f(x)~g(x)→O(f(x))=O(g(x))

我们设h(x)=O(f(x))h(x) = O(f(x)),由渐近等价得定义得

f(x)=g(x)+o(g(x))f(x)=g(x)+o(g(x))

由无穷小定义可得,对于任意ε>0ε>0,总存在NN,使得下列不等式成立

o(g(x))<εg(x),x>No(g(x))<εg(x),x>N

ε=1ε=1,便得到

g(x)+o(g(x))<2g(x),x>Ng(x)+o(g(x))<2g(x),x>N

替换掉f(x)f(x),得到

0h(x)cf(x)2cg(x)0 \leq h(x) \leq cf(x) \leq 2cg(x)

命题得证

其它结论

通过上面两个结论,再利用其它高等数学知识,我们便可以推出下面的结论

1.f(x)+g(x)=O(f(x)+g(x))2.O(k)=O(1)3.O(kx)=O(x)4.O(xn+o(xn))=O(xn)\begin{array}{ll} 1. &f(x)+g(x)=O(f(x)+g(x)) \\\\ 2. &O(k)=O(1) \\\\ 3. &O(kx)=O(x) \\\\ 4. &O(x^n+o(x^n))=O(x^n) \end{array}

因此,在计算渐近时间复杂度时,若出现多项式,我们可以遵守以下准则

  1. 只保留最高阶的项
  2. 最高阶的项系数为1

例如: O(4n3+2n2+9)=O(n3)O(4n^3+2n^2+9)=O(n^3)

评论