時間複雜度和空間複雜度

2021-10-02 02:23:16 字數 1764 閱讀 2701

度量程式執行時間的兩個方法

事後統計,根據演算法的實際執行時間來分析

問題* 過度依賴計算機的硬體設施,無法體現出演算法的優越性

* 需要程式完全執行才能比較,花費過多時間

事前估算,根據演算法的時間複雜度來計算

時間頻度t(n)

1.基本介紹:* 乙個演算法中語句執行的次數稱之為時間頻度 *

乙個演算法花費的時間與演算法中語句執行的次數成正比例,即那個演算法執行的語句次數越多,那就花費時間越多

sum =0;

for(

int i =

0;i <=

100; i ++)

另一種,用公式來說,無論你要計算的數字由多大,最後都時執行一次

sum =(1

+ i )

* i /

2;

2.計算說明

時間複雜度

基本價紹:如果存在函式f(n),使得當n趨於無窮大時,t(n)/f(n)為非零的常數,,那麼f(n)就是和t(n)同數量級的函式,記作t(n) = o(f(n)),o(f(n))稱漸進時間複雜度,簡稱時間複雜度。

計算方法:用常數項代替所有時間頻度t(n)中的常數項——》只保留最高次項——》最高次項的係數

t(n) = 2n2 + 7n + 9

——》 t(n) =2 n2 + 7n + 1

——》 t(n) = 2n2

——》 t(n) = n2,

其中n2即為對應的時間複雜度。

時間頻度不同,他的時間複雜度可能相同

常見的時間複雜度:

int i =1;

i ++

;

int i =1;

while

(i < n)

int j =1;

for(

int i =

0;i < n ;i ++

)

for

(int m =

1;m < n;m ++

)}

for

(int i =

0; i < n;i ++

)}

上述按照對應的從上往下的順序,時間複雜度,依次增加。

平均時間複雜度和最壞時間複雜度

基本介紹:

二者關係:取決於你的演算法

以排序演算法為例

排序法平均時間複雜度

最壞時間複雜度

備註冒泡

o(n2)

o(n2)

n小時比較好

交換o(n2)

o(n2)

n小時比較好

選擇o(n2)

o(n2)

n小時比較好

插入o(n2)

o(n2)

當大部分已經排序好再插入排序較好

基數o(logr b)

o(logr b

b是真數,r是基數

shell

o(n log n)

o(ns) 1s是所選分組,n較大時好

快速o(n log n)

o(n2)

n較大時好

歸併o(n log n)

o(n log n)

n較大時好

堆o(n log n)

o(n log n)

n較大時好

空間複雜度

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...

演算法複雜度 時間複雜度和空間複雜度

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...

演算法複雜度 時間複雜度和空間複雜度

演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...