复杂性的渐近性态及其阶
上一篇 / 下一篇 2007-04-19 08:53:46 / 个人分类:算法
51Testing软件测试网x+{'|l:G
随着经济的发展、社会的进步、科学研究的深入,要求用计算机解决的问题越来越复杂,规模越来越大。但是,如果对这类问题的算法进行分析用的是第二段所提供的方法,把所有的元运算都考虑进去,精打细算,那么,由于问题的规模很大且结构复杂,算法分析的工作量之大、步骤之繁将令人难以承受。因此,人们提出了对于规模充分大、结构又十分复杂的问题的求解算法,其复杂性分析应如何简化的问题。
d.z4] v8^W051Testing软件测试网Ix*fc p O2{U我们先要引入复杂性渐近性态的概念。设T(N)是在第二段中所定义的关于算法A的复杂性函数。一般说来,当N单调增加且趋于∞时,T(N)也将单调增加趋于∞。对于T(N),如果存在T’(N),使得当N→∞时有:
6b$]#`|e*_08A2z%x,h#c-P M2zZ#u["a'z0(T(N)-T’(N))/T(N) → 0
fWqHTS$b.AF0那么,我们就说T’(N)是T(N)当N→∞时的渐近性态,或叫T’(N)为算法A当N→∞的渐近复杂性而与T(N)相区别,因为在数学上,T’(N)是T(N)当N→∞时的渐近表达式。
1@5F.J5g g)Py051Testing软件测试网4RJ^%wd/`o,a q z._:U直观上,T’(N)是T(N)中略去低阶项所留下的主项。所以它无疑比T(N)来得简单。比如当51Testing软件测试网)[!O Q2BPH
51Testing软件测试网 @A Z0_%dC*L,BT(N)=3N2+4Nlog2N+751Testing软件测试网1cnNv ThH;J
时,T’(N)的一个答案是3N2,因为这时有:51Testing软件测试网G)A$OXE%EJ(w~7~9T6G
51Testing软件测试网6@#?*kf k^6k x!Q51Testing软件测试网sUla`(g+BC(?
显然3N2比3N2+4Nlog2N+7简单得多。
H$lK[cIm051Testing软件测试网#B:R?P{y%^&c~由于当N→∞时T(N)渐近于T’(N),我们有理由用T’(N)来替代T(N)作为算法A在N→∞时的复杂性的度量。而且由于于T’(N)明显地比T(N)简单,这种替代明显地是对复杂性分析的一种简化。51Testing软件测试网.c&l0[,},Bn;B~l
51Testing软件测试网+q&S0S-xYug)\{进一步,考虑到分析算法的复杂性的目的在于比较求解同一间题的两个不同算法的效率,而当要比较的两个算法的渐近复杂性的阶不相同时,只要能确定出各自的阶,就可以判定哪一个算法的效率高。换句话说,这时的渐近复杂性分析只要关心T’(N)的阶就够了,不必关心包含在T’(N)中的常数因子。所以,我们常常又对T’(N)的分析进--步简化,即假设算法中用到的所有不同的元运算各执行一次,所需要的时间都是一个单位时间。
nj0i9O$uI!x*{051Testing软件测试网j;Q~-A^*Z1}-S+obL综上所述,我们已经给出了简化算法复杂性分析的方法和步骤,即只要考察当问题的规模充分大时,算法复杂性在渐近意义下的阶。与此简化的复杂性分析方法相配套,需要引入五个渐近意义下的记号:Ο、Ω、θ、ο和ω。51Testing软件测试网'V^EJeXm}U
5Lwg@V.^I0以下设f(N)和g(N)是定义在正数集上的正函数。51Testing软件测试网"zV%}P }
51Testing软件测试网q`O(~n8G:l如果存在正的常数C和自然数N0,使得当N≥N0时有f(N)≤Cg(N)。则称函数f(N)当N充分大时上有界,且g(N)是它的一个上界,记为f(N)=Ο(g(N))。这时我们还说f(N)的阶不高于g(N)的阶。51Testing软件测试网1P+sS)W|C6a/S D1}
举几个例子:51Testing软件测试网J[r"j?Yk
(1)因为对所有的N≥1有3N≤4N,我们有3N=Ο(N);51Testing软件测试网Q \\;lL5L!S
(2)因为当N≥1时有N+1024≤1025N,我们有N+1024=Ο(N);51Testing软件测试网Y8f*QK~|)`,l+]
(3)因为当N≥10时有2N2+11N-10≤3N2,我们有2N2+11N-10=Ο(N2);
B5rU`Wv,OH0(4)因为对所有N≥1有N2≤N3,我们有N2=Ο(N3);51Testing软件测试网#y+l;ot)q3V
(5)作为一个反例N3≠Ο(N2)。因为若不然,则存在正的常数C和自然数N0,使得当N≥N0时有N3≤CN2,即N≤C。显然当取N=max(N0,[C]+l)时这个不等式不成立,所以N3≠Ο(N2)。51Testing软件测试网3D_R ^v U$C6q-{
按照大Ο的定义,容易证明它有如下运算规则:
?WJ8y1OA"QUJ$J1R X0- Ο(f)+Ο(g)=Ο(max(f,g));
- Ο(f)+Ο(g)=Ο(f+g);
- Ο(f)·Ο(g)=Ο(f·g);
- 如果g(N)=Ο(f(N)),则Ο(f)+Ο(g)=Ο(f);
- Ο(Cf(N))=Ο(f(N)),其中C是一个正的常数;
- f=Ο(f);
规则1的证明:
/_1O~X B051Testing软件测试网W!h#? WC设F(N)=Ο(f) 。根据记号Ο的定义,存在正常数C1和自然数N1,使得对所有的N≥N1,有F(N)≤C1f(N)。类似地,设G(N)=Ο(g),则存在正的常数C2和自然数N2使得对所有的N≥N2有G(N)≤C2g(N),今令:
"x*_"@:HWp04E-M1kkz0C3=max(C1,C2)