資料結構 時間複雜度與空間複雜度

2021-10-24 17:21:36 字數 1959 閱讀 6050

演算法效率分兩種,時間效率和空間效率,即時間複雜度和空間複雜度,前者衡量演算法執行速度,後者衡量演算法所需要的額外空間

2.1基本概念

演算法中的時間複雜度是乙個函式,定量描述了演算法執行時間

總結下來就是:演算法種基本操作的執行次數

關注點:操作的數量級/基本操作的執行次數

①執行時間和硬體資源強相關,不同硬體處理速度有差異

②cpu每秒鐘執行操作在億級以上

2.2大o的漸進表示法

// 請計算一下func1基本操作執行了多少次?

void

func1

(int n)

}for

(int k =

0; k <

2* n ;

++ k)

int m =10;

while

(m--

)printf

("%d\n"

, count);}

//func1 執行的基本操作次數 :

n =10

f(n)

=130

n =100

f(n)

=10210

n =1000

f(n)

=1002010

實際中我們計算時間複雜度時,我們其實並不一定要計算精確的執行次數,而只需要大概執行次數,那麼這裡我們使用大o的漸進表示法。

大o符號(big o notation):是用於描述函式漸進行為的數學符號。

推導大o階方法:

1、最高次項有係數,忽略係數

2、如果執行次數為常數次,就為o(1)

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

4.不能依靠迴圈的巢狀簡單腿斷時間複雜度,應該具體分析基本操作的執行次數

使用大o的漸進表示法以後,func1的時間複雜度為:o(n²)

n = 10 f(n) = 100

n = 100 f(n) = 10000

n = 1000 f(n) = 1000000

通過上面我們會發現大o的漸進表示法去掉了那些對結果影響不大的項,簡潔明瞭的表示出了執行次數。

另外有些演算法的時間複雜度存在最好、平均和最壞情況:

最壞情況:任意輸入規模的最大執行次數(上界)

平均情況:任意輸入規模的期望執行次數

最好情況:任意輸入規模的最小執行次數(下界)

例如:在乙個長度為n陣列中搜尋乙個資料x

最好情況:1次找到

最壞情況:n次找到

平均情況: n/2次找到

官方概念:是對乙個演算法在執行過程中臨時占用儲存空間大小的亮度

直白來說:空間複雜度不看程式占用多少b的記憶體,直接看變數的個數,並且是演算法中建立的變數個數

具體例項

// 計算bubblesort的空間複雜度?

void

bubblesort

(int

* a,

int n)}if

(exchange ==0)

break;

}}

使用常數個額外空間,所以空間複雜度為o(1)

如果演算法執行所需要的臨時空間不隨著某個變數n的大小而變化,所以空間複雜度為乙個常量!,可表示為o(1)

// 計算階乘遞迴factorial的空間複雜度?

long

long

factorial

(size_t n)

遞迴呼叫了n次,開闢了n個棧幀,每個棧幀使用了常數個空間,空間複雜度為o(n)

資料結構 時間複雜度 空間複雜度

1.演算法效率 演算法效率可以用來衡量乙個演算法的好壞 演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小...

資料結構時間複雜度和空間複雜度

1 演算法o n 關注n的階數,當數十分大的時候,常數可以忽略。o n 又稱為大o記法。2 t n o f n 隨著n變化而變化,f n 是某個函式,執行的次數等於時間,一般情況下,t n 增長最慢的演算法最優。4 推到o n 1,用1取代時間中所有加法常數 哪些可以忽略 2,在修改後的執行函式中,...

資料結構 時間複雜度和空間複雜度

通常我們衡量乙個演算法的複雜度時,會有兩種演算法效率分析方式 第一種是時間效率,第二種是空間效率。時間效率被稱為時間複雜度,而空間效率被稱作空間複雜度。時間複雜度主要衡量的是乙個演算法的執行速度,空間複雜度主要衡量一乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小。所以對空間複雜...