資料結構和演算法學習筆記(2) 演算法時間複雜度

2021-10-22 13:18:47 字數 2665 閱讀 7782

系統執行次數就為時間。

演算法的時間量度

語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。

記作t(n)= o(f(n))

表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同

這裡主要有三個方法

用常數1期待執行時間的所有加法常數

保留最高項

去除最高項的係數

int n =

0, s =0;

n =100

;s =(1

+n)*n/2;

printf

("這是示例1\n");

printf

("常數階\n");

printf

("時間複雜度為o(1)\n"

);

解析:時間複雜度為o(1),因為t(n)是關於問題規模n的函式,而這裡只有s = (1+n)*n/2這句**關於n,所以為o(1)。簡單來說演算法的執行時間不隨問題規模n的增加而增。

int i =

1,n =

100,sum =0;

for(i =

0; i < n ;i++

)printf

("這是示例2\n");

printf

("線性階,這種非巢狀的迴圈\n");

printf

("時間複雜度為o(n)\n"

);

解析:這裡有個for迴圈,隨著n的增大,時間也增大,所以這裡為o(n)。

int i =

1,j =

0,n =

100;

for(i =

0; i < n ;i++)}

printf

("這是示例3\n");

printf

("平方階,這種是巢狀的迴圈\n");

printf

("時間複雜度為o(n^2)\n"

);

解析:這裡時間複雜度為o(n2),是因為這裡有個for迴圈裡面只巢狀了乙個,如果最裡面的for迴圈再有巢狀for迴圈,那麼時間複雜度就為o(n^3)

這裡再拿出乙個示例,複雜度也為o(n2)

int i =

1,j =

0,n =

100;

for(i =

0; i < n ;i++

)}

解析:演算法執行總次數為n+(n-1)+(n-2)+……1

那麼我們優化一下為 n(n+1)/2,再化簡為n2/2+n/2。根據我們上面的方法,保留最高項(此時為n2/2),再去除最高項的係數,此時就為n2。

int i =

1,n =

100;

while

(i < n)

printf

("這是示例4\n");

printf

("對數階\n");

printf

("時間複雜度為o(logn)\n"

);

解析:每次 i * 2 之後比較n,大於就退出。這裡假設我們有x個2相乘後大於n。算出x就是時間複雜度!

因為 2^x = n

所以有 log(2)n = x 所以時間複雜度o( logn )

上面講解了常數階、線性階、平方階和對數階,那麼現在就是將上面幾種,通過函式的方式組合起來。

int i,j;

for(i =

0; i < n; i++

)void

function

(count)

解析:for迴圈的是時間複雜度為o(n),函式function的複雜度為o(1),所以整體的時間複雜度為o(n)

n++

;//執行1次

function

(n);

//執行n次

for(i =

0; i < n; i++

)for

(i =

0; i < n ;i++)}

void

function

(count)

}

例子

時間複雜度

名稱5256525

o(1)

常數階3n+4

o(n)

線性階3n2+5n+91

o(n2)

平方階9log(2)n+4

o(logn)

對數階2n+3nlog(2)n+14

o(nlogn)

nlogn階

n3+5n2+6

o(n3)

立方階2^n

o(2^n)

指數階這裡簡單用關係總結

資料結構和演算法學習筆記

資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。程式設計 資料結構 演算法 簡單來說資料結構就是關係,元素相互之間存在的一種或多種特定關係的集合。1.1 邏輯結構和物理結構 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條...

演算法學習 資料結構2

1 資料結構概述 數結構是計算機中對資料的一種儲存和組織方式,同是也泛指相互之間存在一種或多種特定關係的資料的集合。2 資料結構中的基本概念 資料 data 資料是資訊的載體,其能夠被計算機識別 儲存和加工處理,是電腦程式加強的 原材料 資料元素 data element 資料元素是資料的基本單位,...

資料結構和演算法學習筆記 棧

引入問題 如何實現瀏覽器的前進後退功能?如何理解棧?後進者先出,先進者後出,這個就是典型的 棧 結構 當某個資料集合只設計在一端插入和刪除資料,並且滿足後進先出的特性,我們就應該首選 棧 這種資料結構 如何實現乙個棧?用 陣列實現的叫順序棧 用鍊錶實現的鏈式棧 基於陣列實現的順序棧 public c...