時間複雜度

2021-10-02 00:06:36 字數 2599 閱讀 1022

演算法的實行時間和原操作的執行次數是成正比的。從演算法中選取一種對於所研究的問題來說是基本操作原操作,以該基本操作在演算法中重複執行的次數作為演算法執行時間的衡量準則。

隨著規模的增大,演算法執行所需要的時間的增長率和f(n)的增長率是相同的。用時間複雜度來表示演算法的時間效率

t (n) = o(f(n))

t (n)為演算法的(漸近)時間複雜度

四, 大o複雜度表示法

大o時間複雜度並不表示**真正的執行時間

而是表示**執行時間隨資料規模增長的變化趨勢,

也稱漸進時間複雜度,簡稱時間複雜度

當n趨向無限大時,公式中的低階,常量,係數三部分並不左右增長趨勢,

所以都近似可以忽略,只記錄公式中的最大量級即可

更複雜的,如果上邊例子1,2的迴圈中載入其他操作,則執行總時間可能為:

t(n)=o(5n+3)或t(n)=o(3n²+5n+2)等等

但他們的時間複雜度均可以記為:t(n)=o(n)和t(n)=o(n²)

時間複雜度和

2.計算方法:

①先找次數

②o( 次數)

③用常數1取代執行時間中的所有常數

④保留最高端

⑤丟掉常數c

for(i = 0; i < n; ++i)1

for(j = 1; j < n; j++)2

3語句1執行次數: n+1,大部分同學會認為這裡是n,但是這個語句會一直執行到n,也就是會執行n+1次才會結束;

語句2執行次數: n* (1+n)=n*(n+1)=n^2+n;因為語句2是巢狀迴圈,前提必須是j語句3執行次數: 雙重迴圈 n^2;

總共f(n)=n+1+n^2+n+n^2=2n^2+2n+1--->o(n^2)

電腦的計算速度很快,一秒鐘都上億次,所以低階項,和係數不考慮。

時間複雜度要遵循:

1、只保留高階項,低階項直接丟棄

2、係數不要

for(int i=0;i<100;i++)    語句頻度為100,常數統一用1來代替,所以時間複雜度為   o( 1 )

3、先寫出執行次數和n之間的關係式

for(int i = 0;i < n; i *= 2)

i 的變化為:1 2 4 8 ...n

2^x=n--->x = log以2為底的n次方(這裡沒法打出來)時間複雜度o(  log以2為底的n次方 )

o(1)表示是常量級時間複雜度,而並非只執行了一行**

大o複雜度表示法,並不表示**真正的執行時間,

僅表示**執行時間隨資料規模增長的變化趨勢

所以,只要**的執行時間不隨n的增大而增大,時間複雜度就是o(1)

一般來講,只要****中不存在迴圈(或迴圈上限為乙個常數),都是常量級

2:o(logn)和o(nlogn)

這裡是首次討論對數階時間複雜度,對數階的時間複雜度非常常見,同時也比較難分析

public void sum1(int n)

return i;

}實際上,隨n變化的變數i取值是乙個等比數列:

函式中建立物件的個數關於問題規模的函式表示式

不是計算實際占用的空間,而是計算整個演算法的輔助空間單元的個數,與問題規模沒有關係(簡單理解就是演算法執行時建立的變數個數(包括臨時變數)

空間可以重用,算遞迴最壞(最深)的一種情況

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

o(1)只要與n無關的空間變數的次數,就是o(1),也就是常數

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

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

時間複雜度 空間複雜度

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

時間複雜度 空間複雜度

演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...