《資料結構系列 計算時間複雜度》

2021-09-21 06:39:19 字數 2529 閱讀 1839

本來接下來想更新線性表的,結果我的乙個小夥伴面試的時候碰到了這個題目,就打算先梳理科普一下這塊的內容。

時間複雜性,又稱時間複雜度,演算法的時間複雜度是乙個函式,它定性描述該演算法的執行時間。這是乙個代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的。

答:官方的解釋,因為受硬體環境和輸入規模的影響,**的絕對執行時間是無法估計的,但是可以估算**的基本執行次數。所以簡單理解,時間複雜度就是其實簡單來講,就是用來計算演算法基本操作的執行次數,描述該演算法執行的時間的。衡量**的好壞重要的2個指標就是執行時間和占用空間。

明白了時間複雜度是個什麼意思之後,先看兩個列子。

no1.

public

static

void

main

(string[

] args)

那麼上面這個方法需要執行 1+1=2 次運算。運算時間記作t(n) = 1

no2.

for

(int i =

0; i < n; i++

)

一共執行了n +1 +n +n = 3n+1次,運算時間記作t(n) = 3n+1

時間複雜度常用大o符號表述,時間的增長速度可以用 f(n) 來描述記作: t(n) = o(f(n))。隨著 輸入大小n 的增大,演算法執行時間的增長率和 f(n) 的增長率成正比,所以 f(n) 越小,演算法的時間複雜度越低,演算法的效率越高。

1.我們曉得:常數項對函式的時間增長速度的影響並不大,所以當t(n)=c(常數)時,我們說這個時間複雜度為o(1),當t(n)不等於乙個常數時,我們是可以把常數項忽略不計

比如當t(n) = 8 時間複雜度記作o(1),當t(n)=n+8, 忽略常數項,時間複雜度記為o(n)

2.我們曉得:對於乙個函式而言,它的階數對它的變化影響是最大的,所以通常在計算時間複雜度的時候,我們只會保留最高項的階數,忽略掉與它相乘的係數。

比如當t(n) = 8n²+3,忽略常數項,忽略最高項的係數,時間複雜度記作o(n²)

3.我們曉得:乙個函式中,高次項對函式的變化影響是最大的,所以我們在計算時間複雜度的時候,通常忽略低次項,只保留最高項

比如當t(n) = 4n³+8n²+3,忽略常數項,忽略最高項的係數,只保留最高項,時間複雜度記作o(n³)

這個又叫做大o推導法總結就是

1.計算下面的時間複雜度

for

(int i =

0; i < n; i++

)

時間複雜度為:t(n) = 2n+1,根據上面的規則,最後:t(n) = o(n)

2.計算下面的時間複雜度

for

(int i =

0; i < n; i++

)}

時間複雜度為t(n) = n×n×o(1) = o(n²)

3.計算下面的時間複雜度

for

(int k =

0; k < n; k++

)for

(int i =

0; i < n; i++

)}

這個時間複雜度為多少尼?

第乙個迴圈的時間複雜度為o(n),第二個雙層迴圈的時間複雜度為o(n²),根據我們只保留最高項,這個函式的時間複雜度為t(n) = o(n²)。

4.計算下列時間複雜度

if

(true)}

else

}}

來算一下時間複雜度是多少?

這個的時間複雜度為t(n) = o(n), 第乙個for迴圈的時間複雜性為t(n)=o(n) 第二個時間複雜度為t(n) = o(n²),對於條件判斷語句,總的時間複雜度等於其中時間複雜度最大的路徑的時間複雜度。但是if是true,else是不會執行的。

5.計算下列時間複雜度

for

(int i=

2; i< n; i++

)

先計算迴圈次數,

假如設定迴圈了x次,那麼迴圈的條件就是2^x < n, 那麼x = log(2)(n),所以t(n) = o(log(2)(n)) 即t(n) = o(log n)

int

function

(int n)

else

}

資料結構時間複雜度計算

1 for迴圈 一次for迴圈的執行時間至多是該for迴圈內語句的執行時間乘以迭代次數。2 巢狀的for迴圈 肯定是計算最內層迴圈語句的執行次數,然後再乘以所以迴圈的迭代次數。3 整個程式 其實找到迴圈迭代次數最多,巢狀最多的進行計算就好。3 當然,我們計算的只是大概值,而且為了計算的簡便,我們一邊...

資料結構 時間複雜度計算

1.演算法的特性 輸入 input 乙個演算法有0個或多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身定出了初始條件 輸出 output 乙個演算法有乙個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的。可以在控制台列印輸出或者返回乙個或多個值等。確定性 defi...

資料結構 時間複雜度計算

1.演算法的特性 輸入 input 乙個演算法有0個或多個輸入,以刻畫運算物件的初始情況,所謂0個輸入是指演算法本身定出了初始條件 輸出 output 乙個演算法有乙個或多個輸出,以反映對輸入資料加工後的結果。沒有輸出的演算法是毫無意義的。可以在控制台列印輸出或者返回乙個或多個值等。確定性 defi...