資料結構與演算法之時間複雜度

2021-10-13 17:54:38 字數 1811 閱讀 9748

度量乙個程式(演算法)執行時間的兩種方法

1、事後統計的方法

這種方法可行, 但是有兩個問題:一是要想對設計的演算法的執行效能進行評測,需要實際執行該程式;二是所得時間的統計量依賴於計算機的硬體、軟體等環境因素, 這種方式,要在同一臺計算機的相同狀態下執行,才能比較那個演算法速度更快。

2、事前估算的方法

通過分析某個演算法的時間複雜度來判斷哪個演算法更優.

舉例說明–>忽略常數項

舉例說明–>忽略低次項

舉例說明–>忽略係數

時間複雜度

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

2)t(n) 不同,但時間複雜度可能相同。 如:t(n)=n²+7n+6 與 t(n)=3n²+2n+2 它們的t(n) 不同,但時間複雜度相同,都為o(n²)。

3)計算時間複雜度的方法:

1.用常數1代替執行時間中的所有加法常數 t(n)=n²+7n+6 => t(n)=n²+7n+1

2.修改後的執行次數函式中,只保留最高端項 t(n)=n²+7n+1 => t(n) = n²

3.去除最高端項的係數 t(n) = n² => t(n) = n² => o(n²)

常見的演算法複雜度

1)常數階o(1)

2)對數階o(log2n)

3)線性階o(n)

4)線性對數階o(nlog2n)

5)平方階o(n^2)

6)立方階o(n^3)

7)k次方階o(n^k)

8)指數階o(2^n)

常見的演算法時間複雜度由小到大依次為:ο(1)<ο(log2n)<ο(n)<ο(nlog2n)<ο(n2)<ο(n3)< ο(nk) <ο(2n) ,隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低

從圖中可見,我們應該盡可能避免使用指數階的演算法

對數階o(log2n)

線性對數階o(nlogn)

資料結構與演算法之時間複雜度

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

資料結構和演算法之時間複雜度

2.空間複雜度 學習資料結構和演算法,並不是為了死記硬背幾個知識點。我們的目的是建立時間複雜度 空間複雜度意識,寫出高質量的 能夠設計基礎架構,提公升程式設計技能,訓練邏輯思維,積攢人生經驗,以此獲得工作回報,實現你的價值,完善你的人生。掌握了資料結構與演算法,你看待問題的深度,解決問題的角度就會完...

大話資料結構 之時間複雜度

程式猿可以讓步,卻不可以退縮,可以羞澀,卻不可以軟弱,總之,程式設計師必須是勇敢的。時間複雜度序言 當前兩天我寫完 大話資料結構 的序言的時候,我就在想,我該如何把從大話資料結構中對應用開發人員有用的知識提煉出來?我是該如同課本一樣把所有的知識羅列個遍?還是如何如何,我想如果我把所有的東西都羅列出來...