時間複雜度 大O演算法

2021-08-28 23:14:58 字數 1469 閱讀 5333

演算法的執行效率,就是演算法**的執行時間。我們需要能夠用肉眼就看出一段**的執行時間。

int cal(int n)

return sum;

}

2,3行都執行了1個unit_time的執行時間,4,5行都執行了n遍,所以是2n*unit_time的執行時間,所以一共是(2n+2)*unit_time。所有的**的執行時間t(n)與每行**的執行次數成正比。

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

t(n)表示**的執行時間;n表示資料規模的大小;f(n)表示每行**執行的次數總和,t(n) = o(2n+2),這就是大o時間複雜度表示法。大o時間複雜度實際上並不具體表示**真正的執行時間,而是表示**執行時間歲資料規模增長的變化趨勢,所以,也叫作漸進時間複雜度。

而我們只需要記錄乙個最大量級就可以了。

時間複雜度分析

1.只關注迴圈執行次數最多的一段**

我們通常可以忽略掉工事中的敞亮,低階,係數,只需要記錄乙個最大階的量級即可。

int cal(int n)

return sum;

}

還是這個例子,2,3行都是常量級別的,4,5行是迴圈執行次數最多的,這兩行**被執行了n次,所以總的時間複雜度是o(n)

加法規則:總複雜度等於量級最大的那段**的複雜度

舉個例子:

int cal(int n) 

int sum_2 = 0;

int q = 1;

for (; q < n; ++q)

int sum_3 = 0;

int i = 1;

int j = 1;

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

}return sum_1 + sum_2 + sum_3;

}

這個**分三個部分,分別是求sum_1,sum_2,sum_3。分析每一部分的時間複雜度,然後再把他們放在一塊,再取乙個量級最大的作為整段**的複雜度。

第一段是乙個常量;第二段是o(n);第三段是o(n^2)

所以取最高的o(n^2).

3.乘法法則:巢狀**的複雜度等於巢狀內外**複雜度的乘積

int cal(int n)  

} int f(int n)

return sum;

}

單獨看cal()函式,假設f()只是乙個普通函式,那麼4-6行就是o(n),但是f()本身並不是乙個簡單的操作,他的時間複雜度是o(n),所以,整個cal()函式的時間複雜度就是,t1(n)t2(n)=o(nn)=o(n^2)

比較常見的演算法時間複雜度:o(1),o(logn),o(nlogn),o(2^n),

o(n^k)等等。。。

參考:極客時間

如何衡量演算法時間複雜度,空間複雜度以及大O表示法

演算法是用來解決特定的問題的一種思想,對於同乙個問題,可以有多種實現方式,最終的結果是一樣的,但是整個過程需要的時間和資源不同,我們就需要在時間和空間上進行衡量。時間複雜度 當前演算法所需要的執行時間 空間複雜度 當前演算法所需要的記憶體空間 大 o 表示法 也叫做漸進式時間複雜度,公式為 t n ...

大O演算法複雜度表示

序言 演算法的時間複雜度和空間複雜度都是用 大o表示法 來表示的。其中o是個常量。常見的排序演算法的時間複雜度 氣泡排序 插入排序 希爾排序 選擇排序的時間複雜度是o n 2 快速排序的時間複雜度是o n log n 空間複雜度 氣泡排序 插入排序 希爾排序 選擇排序的空間複雜度是o 1 快速排序的...

演算法的時間複雜度O

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