資料結構系列之複雜度分析

2021-07-02 18:07:53 字數 1548 閱讀 2743

1 時間複雜度

求解演算法的時間複雜度的具體步驟是:

⑴ 找出演算法中的基本語句;

演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。

⑵ 計算基本語句的執行次數的數量級;

只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化演算法分         析,並且使注意力集中在最重要的一點上:增長率。

⑶ 用大ο記號表示演算法的時間效能。

將基本語句執行次數的數量級放入大ο記號中。

如果演算法中包含巢狀的迴圈,則基本語句通常是最內層的迴圈體,如果演算法中包含並列的迴圈,則將並列迴圈的時間複雜度相加。例如:

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

x++;

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

for(j=1;j<=n;j++)

x++;

第乙個for

迴圈的時間複雜度為ο

(n),第二個

for迴圈的時間複雜度為ο

(n2)

,則整個演算法的時間複雜度為ο

(n+n2)=

ο(n2)。

常見的演算法時間複雜度由小到大依次為:

ο(1)

<ο(log2n)

<ο(n)

<ο(nlog2n)

<ο(n2)

<ο(n3)

<…<ο

(2n)

<ο(n!)

ο(1)

表示基本語句的執行次數是乙個常數,一般來說,只要演算法中不存在迴圈語句,其時間複雜度就是ο

(1)。ο

(log2n)

、ο(n)

、ο(nlog2n)

、ο(n2)

和ο(n3)

稱為多項式時       間,而ο

(2n)

和ο(n!)

稱為指數時間。計算機科學家普遍認為前者是有效演算法,把這類問題稱為

p類問題,而把後者稱為

np問題。

2 空間複雜度

空間複雜度(space complexity)

是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。乙個演算法在計算機儲存器上所占用的儲存空間,包括儲存演算法本身所占用的儲存空    間,演算法的輸入輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間這三個方面。

一般情況下,乙個程式在機器上執行時,除了需要儲存程式本身的指令、常數、變數和輸入資料外,還需要儲存對資料操作的儲存單元。若輸入資料所佔空間只取決於問題        本身,和演算法無關,這樣只需要分析該演算法在實現時所需的輔助單元即可。若演算法執行時所需的輔助空間相對於輸入資料量而言是個常數,則稱此演算法為原地工作,空間復         雜度為o(1)。

關於o(1)

的問題, 

o(1)

是說資料規模和臨時變數數目無關,並不是說僅僅定義乙個臨時變數。舉例:無論資料規模多大,我都定義

100個變數,這就叫做資料規模和臨時變數    數目無關。就是說空間複雜度是

o(1)

資料結構之複雜度分析

目錄 1 為什麼需要複雜度分析?2 大o複雜度表示法 3 時間複雜度 3.1 只關注迴圈執行次數最多的一段 3.2 總的複雜度等於量級最大的那段 的複雜度 加法法則 3.3 巢狀 的複雜度等於巢狀內外 複雜度的乘積 乘法法則 3.4 時間複雜度 4 空間複雜度 5 時間複雜度擴充套件 網上一直有乙個...

資料結構之複雜度分析(二)

一.什麼是複雜度分析 二.為什麼需要複雜度分析 三.如何進行複雜度分析 空間複雜度 四.複雜度分析的細化 衡量一段 的執行效率最主要的無非是 快 省 其中快是指執行速度快,省是指占用空間少。這裡所指的複雜度分析指的是時間 空間複雜度。我們常說的以空間換取時間也正是對應這兩點。時間複雜度 執行時間隨著...

演算法分析之複雜度

時間複雜度 是度量演算法執行的時間長短或者說是程式執行的次數。詳細說明 乙個演算法,處理n條資料需要的時間可以用表示式 a n b來表示的話,稱它的時間複雜度為o n 也就是說,100條資料需要1秒的話,1000條資料需要10s。如果是用表示式 a n n b n c的話,複雜度為o n的平方 這樣...