複雜度分析 1

2021-08-29 22:52:24 字數 1318 閱讀 4022

空間複雜度

時間複雜度

第一段**:

1

intcal

(int n)

7return sum;

8}

如上所示**,求 1,2,3…n 的累加和,從cpu的角度看,這段**每一行都執行著類似的操作:讀資料-運算-寫資料。

我們假設每行**執行的時間是一樣的,為unit_time,在這個基礎上,我們可以估算出這段**的總的執行時間。

第2行和第3行都只執行一次,為2 * unit_time時間,第4行和第5行都執行了n遍,為

2n*unit_time時間,所以這段**總的執行時間 t(n) 大概為:

t(n) = (2n + 2)*unit_time;
從上面的計算公式可看出,**的總執行時間 t(n) 與每行**的執行次數 n 成正比。

在來看下面的**:

第二段**:

1

intcal

(int n)10}

11}

如上**所示,這是乙個迴圈巢狀**,同樣假定每行**執行時間都是一樣的為

unit_time,第2,3,4行每行都執行一次,時間為3 * unit_time,第5,6行執行了n次,

時間為2n*unit_time,第7,8行執行了n2次,時間為2n2 * unit_time,這段**總執行時間t(n)為:

t(n) = (2n*n + 2n + 3)*unit_time;
大o表示法

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

t(n) 表示**執行的時間;n 表示資料規模,f(n)表示每行**執行的時間總和,因為

是乙個公式,所以用f(n)表示,公式中的o代表 t(n) 與 f(n) 成正比。

大o表示法並不表示**執行的具體時間,而是表示**執行時間隨資料規模增長的變化趨勢。所有也叫漸近時間複雜度,簡稱時間複雜度。

因為大o表示法只表示時間趨勢,所以在估算時間時,會忽略公式中的常量,低階項。

如:t(n) = (2n + 2)*unit_time

只取n作為估算,大o表示時間複雜度為: o(n)

t(n) = (2n*n + 2n + 3)*unit_time

只取n2,大o表示時間複雜度為: o(n2)

空間複雜度

1

void

print

(int n)

7for

(i = n-

1; i >=0;

--i)

10}

複雜度分析 時間複雜度分析和空間複雜度分析

其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...

分析時間複雜度(1)

目錄 一 度量 1.1 定義 1.2 思路 二 實戰 2.1 例一 2.2 例二求n 的遞迴函式的時間複雜度 2.3 例三 將演算法中基本操作的執行次數作為演算法時間複雜度的度量。這裡所討論的時間複雜度不是執行完一段程式的總時間,而是其中基本操作的總次數。這很好理解 程式執行環境不同,執行的總時間是...

演算法複雜度分析 1

空間複雜度 複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。如果存在常數c和n0使得當n n0時t n cf n 則記為t n o f n 例如 雖然對於較小的n值1000n要比n2大,但n2以更快地速度增長,因此n2最終將是更大的函式。在這種情況下,n 1...