資料結構學習筆記 演算法分析

2021-10-24 01:59:33 字數 1618 閱讀 9306

演算法分析方法:

時間複雜度

空間複雜度

乙個演算法是由控制結構(順序,分支和迴圈)和原操作構成的。

void

fun(

int a,

int n)

for(i =

0; i < n; i++

)·······················(4)

}

演算法的執行時間取決於控制結構和原操作的綜合效果,如果for迴圈迴圈次數很多,哪怕原操作很快,時間也會比較長,即使只有乙個順序結構,如果原操作比較多,那麼時間也會比較長。

很顯然,如果執行一次演算法的過程中,如果原操作被執行的次數越少,那麼演算法執行的速度也會更快,反之,速度就會越慢。

**頻度:**原操作執行的次數。他是問題規模的函式,用t(n)表示。

演算法執行時間大致等於原操作所需時間*t(n),也就是說執行時間與t(n)成正比,因此我們用t(n)表示演算法的執行時間。

本題中的問題規模是n。

如果不考慮定義語句,那麼需要操作的語句就是定義語句下面的三個語句。

語句1:從i = 0開始執行,知道i=n,判斷不成立後才執行結束,所以語句1執行力n+1次。

語句2:語句2是語句1的迴圈體裡面的內容,每當語句1的迴圈體執行一次的時候,它就從i = 0開始,知道i=n,它還會執行判斷,然後才結束,那麼語句1的迴圈體每執行一次,語句2就執行n+1次,要注意的是,語句1的迴圈體只執行n次(i = n-1的時候是最後一次)所以語句2執行了n(n+1)次。

語句3:語句3是語句2的迴圈體裡面的內容,語句1的迴圈體每執行一次,語句2裡面的迴圈體就執行n次,語句1的迴圈體一共執行n次,那麼語句3就執行n^2次。

所以這個演算法的原操作的次數t(n) = n+1+n(n+1)+n^2

時間複雜度:

演算法分析不是用絕對時間比較,是用原操作的數量級來表示。

就是取t(n)的最高端,也就是說上面例題的時間複雜度是o(n^2).

如果乙個演算法沒有迴圈,或者是迴圈次數與問題規模無關,那麼把這樣的演算法的時間複雜度記作o(1),稱之為常數階。

常用時間複雜度之間的關係:

簡化的演算法時間複雜度分析:

用原操作的執行次數來代替t(n),也就是說上面的那個題目的t(n) = n^2,時間複雜度 = o(n^2)。以後計算t(n)時,僅僅只考慮原操作的執行次數。

平均時間複雜度,最好、最壞時間複雜度:

乙個演算法有時候對輸入的資料敏感,可能會出現不同的資料,演算法的時間複雜度不同,那麼假設所有輸入例項的集合為d,i∈d,輸入i的概率 = p(i),輸入i的時間複雜度為t(i),那麼這個演算法的平均時間複雜度為

概率✖時間複雜度 ,然後求和。

空間複雜度:

演算法在執行過程中臨時占用得到記憶體大小。

時間和空間複雜度具有矛盾性:

時間越少,空間就會越大。

時間越大,空間就會越小。

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

演算法和資料結構就是程式設計的乙個重要部分,你若失掉了演算法和資料結構,你就把一切都失掉了。一 資料結構和演算法緒論 說說資料結構 程式設計 資料結構 演算法 再簡單來說,資料結構就是關係,也就是資料元素相互之間存在的一種或多種特定關係的集合。資料結構的分類 傳統上,我們把資料結構分為邏輯結構和物理...

資料結構學習筆記

資料結構概述 定義我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構 儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢摸個 元素,刪除某個元素,對所有元素進行排序 而執行的相應操作,這個相應 的操作也叫演算法 資料結構 個體 個體的關係 演算法 對儲存資料的操作 演算...

資料結構學習筆記

資料結構學習筆記 程式 資料結構 演算法 資料結構 資料 結構 結構的本質是關係 資料之間的關係從不通風層面上分為邏輯關係和物理關係 演算法的設計要依據資料的邏輯關係 演算法的實現要依據資料的物理關係 物理關係是邏輯關係的基礎和載體 演算法實現時需要先依據問題抽象出資料模型,即初步確定待處理資料的邏...