複雜性的計量

來源:互聯網
上載者:User
複雜性的計量

演算法的複雜性是演算法運行所需要的電腦資源的量,需要的時間資源的量稱作時間複雜性,需要的空間(即儲存空間)資源的量稱作空間複雜性。這個量應該集中反映演算法中所採用的方法的效率,而從運行該演算法的實際電腦中抽象出來。換句話說,這個量應該是只依賴於演算法要解的問題的規模、演算法的輸入和演算法本身的函數。如果分別用N、IA來表示演算法要解問題的規模、演算法的輸入和演算法本身,用C表示演算法的複雜性,那麼應該有:

C =F(N,I,A)

其中F(N,I,A)N,I,A的一個確定的三元函數。如果把時間複雜性和空間複雜性分開,並分別用TS來表示,那麼應該有:

T =T(N,I,A) (2.1)

S =S(N,I,A) (2.2)

通常,我們讓A隱含在複雜性函數名當中,因而將(2.1)和(2.2)分別簡寫為

T =T(N,I)

S =S(N,I)

由於時間複雜性和空間複雜性概念類同,計算方法相似,且空間複雜性分析相對地簡單些,所以下文將主要地討論時間複雜性。

下面以T(N,I)為例,將複雜性函數具體化。

根據T(N,I)的概念,它應該是演算法在一台抽象的電腦上運行所需的時間。設此抽象的電腦所提供的元運算有k種,他們分別記為O1,O2 ,..,Ok;再設這些元運算每執行一次所需要的時間分別為t1,t2,..,tk 。對於給定的演算法A,設經過統計,用到元運算Oi的次數為eii=1,2,..,k ,很明顯,對於每一個i,1<=i<=k,ei是NI的函數,即ei=ei(N,I)。那麼有:

(2.3)

其中ti,i=1,2,..,k,是與N,I無關的常數。

顯然,我們不可能對規模N的每一種合法的輸入I都去統計ei(N,I),i=1,2,…,k。因此T(N,I)的運算式還得進一步簡化,或者說,我們只能在規模為N的某些或某類有代表性的合法輸入中統計相應的ei , i=1,2,…,k,評價時間複雜性。

下面只考慮三種情況的複雜性,即最壞情況、最好情況和平均情況下的時間複雜性,並分別記為Tmax(N )、Tmin(N)和Tavg(N )。在數學上有:

(2.4)

(2.5)

(2.6)

其中,DN是規模為N的合法輸入的集合;I *是DN中一個使T(N,I *)達到Tmax(N)的合法輸入,是DN中一個使T(N,)到Tmin(N)的合法輸入;而P(I)是在演算法的應用中出現輸入I 的機率。

以上三種情況下的時間複雜性各從某一個角度來反映演算法的效率,各有各的用處,也各有各的局限性。但實踐表明可操作性最好的且最有實際價值的是最壞情況下的時間複雜性。下面我們將把對時間複雜性分析的主要興趣放在這種情形上。

一般來說,最好情況和最壞情況的時間複雜性是很難計量的,原因是對於問題的任意確定的規模N達到了Tmax(N)的合法輸入難以確定,而規模N的每一個輸入的機率也難以預測或確定。我們有時也按平均情況計量時間複雜性,但那時在對P(I)做了一些人為的假設(比如等機率)之後才進行的。所做的假設是否符合實際總是缺乏根據。因此,在最好情況和平均情況下的時間複雜性分析還僅僅是停留在理論上。

現在以上一章提到的問題1的演算法Search為例來說明如何利用(2.4)-(2.6)對它的Tmax、Tmin和Tavg進行計量。這裡問題的規模以m計算,演算法重用到的元運算有賦值、測試和加法等三種,它們每執行一次所需的時間常數分別為a,t,和s 。對於這個例子,如假設c在A中,那麼容易直接看出最壞情況的輸入出現在c=A[m]的情形,這時:

Tmax(m)=a+2mt+(m-1)s+(m-1)a+t+a=(m+1)a+(2m+1)t+(m-1)s (2.7)

而最好情況的輸入出現在c=A[1]的情形。這時:

(2.8)

至於Tavg(m),如前所述,必須對Dm上的機率分布做出假設才能計量。為簡單起見,我們做最簡單的假設:Dm上的機率分布是均等的,即P(A[i]=c)=1/m 。若記Ti=T(m,Ii),其中Ii表示A[i]=c的合法輸入,那麼:

(2.9)

而根據與(2.7)類似的推導,有:

代入(2.9) ,則:

這裡碰巧有:

Tavg(m)=(Tmax(m)+Tmin(m))/2

但必須指出,上式並不具有一般性。

類似地,對於演算法B_Search照樣可以按(2.4)-(2.6)計算相應的Tmax(m)、Tmin(m)和Tavg(m)。不過,我們這裡只計算Tmax(m) 。為了與Search比較,仍假設c在A中,即最壞情況的輸入仍出現在c=A[m]時。這時,while迴圈的迴圈體恰好被執行了logm +1 即k+1 次。因為第一次執行時資料的規模為m,第二次執行時規模為m/2等等,最後一次執行時規模為1。另外,與Search少有不同的是這裡除了用到賦值、測試和加法三種原運算外,還用到減法和除法兩種元運算。補記後兩種元運算每執行一次所需時間為b和d ,則可以推演出:

(2.10)

比較(2.7)和(2.10) ,我們看到m充分大時,在最壞情況下B_Search的時間複雜性遠小於Search的時間複雜性。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.