關於時間複雜度~

來源:互聯網
上載者:User

標籤:運行時   多項式   解釋   梳理   layout   hive   三次   style   括弧   

首先:借鑒前人大佬!感謝!本文只做整理

http://www.matrix67.com/blog/archives/105

 

首先在文中介紹了時間複雜度O,本身自己對於這個有所遺忘,並且本身在演算法課上學的不咋地,正好藉此梳理一下。

下面給出百度百科關於時間複雜的定義:

在電腦科學中,演算法的時間複雜度是一個函數,它定性描述了該演算法的已耗用時間。這是一個關於代表演算法輸入值的字串的長度的函數。時間複雜度常用大O符號表述,不包括這個函數的低階項和首項係數。

百度百科關於時間複雜度的計算方法:

一般,演算法中基本操作重複執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),使得T(n)/f(n)的極限值(當n趨近於無窮大時)為不等於零的常數,則稱f(n)是T(n)的同數量級函數。記作T(n)=O(f(n)),稱O(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。

分析:隨著模組n的增大,演算法執行的時間的增長率和 f(n) 的增長率成正比,所以 f(n) 越小,演算法的時間複雜度越低,演算法的效率越高。

2. 在計算時間複雜度的時候,先找出演算法的基本操作,然後根據相應的各語句確定它的執行次數,再找出 T(n) 的同數量級(它的同數量級有以下:1,log2n,n,n log2n ,n的平方,n的三次方,2的n次方,n!),找出後,f(n) = 該數量級,若 T(n)/f(n) 求極限可得到一常數c,則時間複雜度T(n) = O(f(n))

例:演算法:

for(i=1; i<=n; ++i){    for(j=1; j<=n; ++j)    {        c[i][j] = 0;//該步驟屬於基本操作執行次數:n的平方次        for(k=1; k<=n; ++k)            c[i][j] += a[i][k] * b[k][j];//該步驟屬於基本操作執行次數:n的三次方次    }}
 則有   ,根據上面括弧裡的同數量級,我們可以確定 n的三次方 為T(n)的同數量級則有   ,然後根據 T(n)/f(n) 求極限可得到常數c則該演算法的時間複雜度:T(n) = O(n^3) 註:n^3即是n的3次方。 3.在pascal中比較容易理解,容易計算的方法是:看看有幾重for迴圈,只有一重則時間複雜度為O(n),二重則為O(n^2),依此類推,如果有二分則為O(logn),二分例如快速冪、二分尋找,如果一個for迴圈套一個二分,那麼時間複雜度則為O(nlogn)。

引文中給出了如下的解釋,我覺得受益良多。

時間複雜度不是表示程式解決一個問題所花費的時間,而是表示,當問題規模擴大後,程式需要的時間長度增長有多快。也就是,對於電腦,處理某一個特定資料的效率不能衡配量序的好壞,而應該看這個資料規模擴大到數百倍後程式的已耗用時間是否一樣?或者是否變慢了?

不管資料多大,程式處理畫的時間始終是那麼多的,我們就說這個程式時好的,具有O(1)的時間複雜度,稱常數級複雜度。資料規模變得多大,花的時間變得多長,這個程式的複雜度就是O(n),比如找N個數中最大的;而像冒泡排序、插入排序等,資料擴大2倍,時間變慢4倍的,屬於O(n^2)的複雜度。還有一些窮舉類的演算法,所需時間長度成幾何階數上漲,這就是O(a^n)的指數級複雜度,甚至O(n!)的階乘級複雜度。不會存在O(2*n^2)的複雜度,因為前面的那個“2”是係數,根本不會影響到整個程式的時間增長。同樣地,O (n^3+n^2)的複雜度也就是O(n^3)的複雜度。因此,我們會說,一個O(0.01*n^3)的程式的效率比O(100*n^2)的效率低,儘管在n很小的時候,前者優於後者,但後者時間隨資料規模增長得慢,最終O(n^3)的複雜度將遠遠超過O(n^2)。我們也說,O(n^100)的複雜度小於O(1.01^n)的複雜度。

容易看出,前面的幾類複雜度被分為兩種層級,其中後者的複雜度無論如何都遠遠大於前者:一種是O(1),O(log(n)),O(n^a)等,我們把它叫做多項式級的複雜度,因為它的規模n出現在底數的位置;另一種是O(a^n)和O(n!)型複雜度,它是非多項式級的,其複雜度電腦往往不能承受。當我們在解決一個問題時,我們選擇的演算法通常都需要是多項式級的複雜度,非多項式級的複雜度需要的時間太多,往往會逾時,除非是資料規模非常小。

 

關於時間複雜度~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.