大O演算法複雜度表示

2021-07-24 18:25:59 字數 3257 閱讀 2090

序言:演算法的時間複雜度和空間複雜度都是用「

大o表示法」

來表示的。其中o是個常量。

常見的排序演算法的時間複雜度:

氣泡排序、插入排序、希爾排序、選擇排序的時間複雜度是o(n^2);

快速排序的時間複雜度是o(n * log n);

空間複雜度:

氣泡排序、插入排序、希爾排序、選擇排序的空間複雜度是o(1);

快速排序的空間複雜度是o(log n);

常見的查詢演算法的時間複雜度:

線性結構的查詢的時間複雜度,如 二分查詢(用於已經排好序的資料,如已序的陣列);o(n)

非線性結構的查詢的時間複雜度,如 二叉查詢樹 ;o(log n)

排序類別  時間複雜度  空間複雜度  穩定

1 插入排序  o(n2)              o(1)         √

2 希爾排序  o(n2)o(1)× //shell(希爾)排序是基於插入排序的,時間效率比插入、選擇、冒泡高,但又比快速排序低點;

3 氣泡排序 o(n2)o(1)√ 

4 選擇排序  o(n2)o(1)×  

5 快速排序  o(nlogn)      o(logn)     ×

6 堆排序  o(nlogn)o(1)× 

7 歸併排序 o(nlogn)        o(n)          √

氣泡排序、插入排序、歸併排序是穩定的,演算法時間複雜度是o(n ^2);

選擇排序、快速排序、堆排序、希爾排序都是不穩定的;

一、 時間複雜度定義

定義:如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t(n),它是n的某一函式t(n)稱為這一演算法的「時間複雜性」。

當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的「漸近時間複雜性」。

二、大o表示法

我們常用大o表示法表示時間複雜性,注意它是某乙個演算法的時間複雜性。大o表示只是說有上界,由定義如果f(n)=o(n),那顯然成立f(n)=o(n^2),它給你乙個上界,但並不是上確界,但人們在表示的時候一般都習慣表示前者。此外,乙個問題本身也有它的複雜性,如果某個演算法的複雜性到達了這個問題複雜性的下界,那就稱這樣的演算法是最佳演算法。

「大o記法" :在這種描述中使用的基本引數是n,即問題例項的規模,把複雜性或執行時間表達為n的函式。這裡的「o」表示量級(order),比如說「二分檢索是o(logn)的」,也就是說它需要「通過logn量級的步驟去檢索乙個規模為n的陣列」記法o ( f(n) )表示當n增大時,執行時間至多將以正比於f(n)的速度增長。

這種漸進估計對演算法的理論分析和大致比較是非常有價值的,但在實踐中細節也可能造成差異。例如,乙個低附加代價的o(n2)演算法在n較小的情況下可能比乙個高附加代價的o(nlogn)演算法執行得更快。當然,隨著n足夠大以後,具有較慢上公升函式的演算法必然工作得更快。

o(1)

temp=i;i=j;j=temp;                     

以上三條單個語句的頻度均為1,該程式段的執行時間是乙個與問題規模n無關的常數。演算法的時間複雜度為常數階,記作t(n)=o(1)。如果演算法的執行時間不隨著問題規模n的增加而增長,即使演算法中有上千條語句,其執行時間也不過是乙個較大的常數。此類演算法的時間複雜度是o(1)。

o(n^2)

2.1.交換i和j的內容

sum=0;                (一次)

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

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

sum++;       (n^2次)

解:t(n)=2n^2+n+1 =o(n^2)

2.2.   

for (i=1;io(log2n )

2.4.

i=1;       ①

while (i<=n)

i=i*2;②

解:語句1的頻度是1,  

設語句2的頻度是f(n),  則:2^f(n)<=n;f(n)<=log2n    

取最大值f(n)= log2n,

t(n)=o(log2n )

o(n^3)

2.5.

for(i=0;i最壞情況的行為和期望行為。

如快速排序的最壞情況執行時間是o(n^2),但期望時間是o(nlogn)。通過每次都仔細地選擇基準值,我們有可能把平方情況(即o(n^2)情況)的概率減小到幾乎等於0。在實際中,精心實現的快速排序一般都能以(o(nlogn)時間執行。

三、圖例

資料結構操作:

陣列排序演算法:

圖操作:

堆操作:

大o複雜度圖表:

大O表示法 時間複雜度

引入原因 用另乙個 通常更簡單的 函式來描述乙個函式數量級的漸近上界。定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式。t n 稱為這一演算法的 時間複雜度 某個演算法的複雜度到達了這個問題複雜度的下界,那就稱這樣的演算法是最佳演算法 決定演算法複雜度的是執...

時間複雜度 大O演算法

演算法的執行效率,就是演算法 的執行時間。我們需要能夠用肉眼就看出一段 的執行時間。int cal int n return sum 2,3行都執行了1個unit time的執行時間,4,5行都執行了n遍,所以是2n unit time的執行時間,所以一共是 2n 2 unit time。所有的 的...

大O表示法和時間複雜度

學資料結構和演算法的目的 實現程式的高速執行,那麼必然要了解複雜度。複雜度分為兩個維度 時間 空間。在開發過程中,我們希望時間和記憶體消耗都越少越好,但很多時候無法做到兼顧,需要在時間和空間之間做出取捨已達到最佳狀態。對複雜度的計算一般採用事前分析估算的方法,即大o表示法。接下來讓我們進入複雜度的學...