資料結構時間複雜度 資料結構之時間複雜度分析

2021-10-11 16:09:35 字數 1379 閱讀 2250

正文:

開篇我們先思考這麼乙個問題:一台老式的 cpu 的計算機執行 o(n) 的程式,和一台速度提高的新式 cpu 的計算機運 o(n2) 的程式。誰的程執行效率高呢?

答案是前者優於後者。為什麼呢?我們從時間複雜度分析就可以知道。

1、什麼是時間複雜度?

在進行演算法分析時,語句總的執行次數 t(n) 是關於問題的規模n 的函式,進而分析 t(n) 隨 n 的變化情況並確定 t(n) 的數量級,演算法的時間複雜度,也就是演算法的時間度量,記作:t(n) = o(f( ))。它表示隨問題的規模 n 的增大,演算法的執行時間的增長率 f(n) 的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間的複雜度,其中 f(n) 是問題規模n的某個函式。

這樣用大寫 [o( )] 來體現演算法時間複雜度的記法,我們就稱之為大o記法。例如:o(n)、o(1)、o(n2)、o(log n) 等等。一般情況下,隨著 n 的增大,t(n) 增長最慢的演算法為最優演算法。

2、推導大o階的方法

如何推導大o階的表示方法,總結了三句口訣:

用時間1取代運算時間中的所有加法常數。

在修改後的執行的函式中,只保留最高端項。

如果最高端項存在且不是1,則去除與這個項相乘的常數。得到的結果就是大o階。

說了太多文字顯得太抽象,我們來看看乙個例子你就明白了。

如圖這個時間複雜度你知道是多少嗎?

分析:當 i = 0時,內迴圈執行了 n 次,

當 i = 1時,內迴圈執行了 n-1 次,

當 i = n-1時。執行了 1 次,所以總的執行次數為:n = (n-1)+(n-2)+ ··· + 1= n(n+1)/2 = n2/2+n/2。

由上面的公式可得:第一條**中沒有加法常數項,不考慮;第二條只保留最高端項,因此保留 n2/2;第三條去除這個項相乘的常數,所以去除了 1/2;最終我們得到的**段時間複雜度就是 o(n2)。

所以有了上面這個公式我們就可以對一般的時間複雜度大o的推導求解,其實理解大 o 推導不算難,難得是對數列的一些相關運算。更多的是考察你的數學功底。所以能不能寫出好的高效率**和你的數學功底有關哦。數學真的很重要(認真臉)。

3、一些常用的o( )時間複雜度推導

例1:o(1)常數階

int sum = 0, n = 100; /* 執行一次 */

sum = (1+n) *n/2; /* 執行一次 */

printf("the sum is:%d

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

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

資料結構概念解析之 時間複雜度

同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項...

資料結構之時間 空間複雜度分析

在很多資料結構的面試題中看似簡單,但是對題目的要求卻挺高,主要就體現在複雜度分析方面。複雜度又分為時間複雜度和空間複雜度。1.時間複雜度 時間複雜度實際就是函式,函式計算執行的基本操作次數 在進行時間複雜度分析時需注意 1 時間複雜度強調的是函式執行的操作次數,這裡的函式是指數學裡面的函式,而不是c...