時間複雜度的小結

2021-10-24 06:43:11 字數 1801 閱讀 9005

一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式f(n),演算法的時間量度記作t(n)=o(f(n))

它隨問題規模n的增大,演算法時間的增長率不超過f(n)的增長率,稱作演算法的漸進時間複雜度,簡稱時間複雜度

一般情況下,通過找出執行次數最多的**段,把它們的執行語句的總次數表示為n的函式。

1、大部分情況下,單個表示式和語句的執行時間是常數,記為 o(1)( 即 o(n^0) )。

2、對於並列迴圈語句,取各迴圈結構計算時間的最大值。

3、對於巢狀迴圈結構,取最內層迴圈體中語句執行次數。

4、如果各層迴圈的次數是相互無關的,可簡單採用乘法法則:各層迴圈的次數相乘。

5、遞迴演算法的執行時間可分為以下兩部分

(1)執行目前層次的遞迴分解運算所需時間。

(2)執行遞迴呼叫所需時間。

下面將演算法中常見的f(n)值根據幾種典型的數量級來列成一張表,根據這種表,我們來看看各種演算法複雜度的差異類符號

舉例常數

o(1)

返回陣列的第乙個元素

對數o(logn)

對有序陣列進行折半查詢

線性o(n)

對陣列進行順序查詢

nlogn

o(nlogn)

歸併排序

平方o(n^2)

選擇排序

立方o(n^3)

傳統的矩陣相乘

指數o(2n)

漢諾塔

其中x軸代表n值,y軸代表t(n)值(時間複雜度)。t(n)值隨著n的值的變化而變化,其中可以看出o(n!)和o(2ⁿ)隨著n值的增大,它們的t(n)值上公升幅度非常大,而o(logn)、o(n)、o(nlogn)隨著n值的增大,t(n)值上公升幅度則很小。

常用的時間複雜度按照耗費的時間從小到大依次是:

o(1)1、常數階

int sum =

0,n =

100;

//執行一次

時間複雜度為o(1)

2、線性階

int sum =0;

for(

int i =

0; i<=n;

++i)

每次迴圈執行一次,迴圈n次,頻度為n,時間複雜度為o(n)。

3、對數階

int i=0;

for(

;i

從上面的**中,i每次乘以2後,都會越來越逼近n,當i不小於n時就會退出迴圈。假設迴圈的次數為x,則由2^x=n得出x=log₂n,因此得出這個演算法的時間複雜度為o(logn)。

4、平方階

int sum=

0for(int i=

0;i)}

從上面**可看出,內層與外層均迴圈了n次,所以該演算法時間複雜度為o(n^2)。

5、立方階

for

(i=1

;i<=n;i++

)for

(j=1

;j<=n;j++

)for

(k=1

;k<=n;k++

) s++

;

從上面**可以看出,執行次數是n*n *n次,時間複雜度為o(n^3)。

除了上述例子外,還有nlogn階和指數階。

時間複雜度 空間複雜度 小結

在計算機領域裡,演算法是一系列程式指令,用於處理特定的運算和邏輯問題。衡量演算法優劣的主要標準是時間複雜度和空間複雜度。資料結構是資料的組織 管理和儲存格式,其使用目的是為了高效地訪問和修改資料。資料結構包含陣列 鍊錶這樣的線性資料結構,也包含樹 圖這樣的複雜資料結構。時間複雜度是對乙個演算法執行時...

dfs時間複雜度 時間複雜度 空間複雜度

時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...

時間複雜度 空間複雜度

時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...