總論 第二章 演算法分析

2021-08-24 20:20:41 字數 1611 閱讀 2457

演算法分析

演算法分析主要集中在時間複雜度和空間複雜度

這裡也只是有所了解,演算法中常見的就那幾個級別,具體還是要看後面的演算法再了解

空間複雜度

t(n) = o(f(n))
表示t(n)de增長率小於等於f(n),也是在演算法分析中最主要使用的表達方式。

f(n)表示的是演算法t(n)增長率的乙個上界,他不需要細緻的描述,只需要粗糙的表示演算法增長率的乙個數量級即可。

1 t1(n) + t2(n) ~ o(max(f1(n) , f2(n) ))

2 t1(n) * t2(n) ~ o(f1(n) * f2(n))

3 對於任意的常數k,有 (log n)^k ~ o(n) [對數增長十分緩慢]

ps:對於電腦科學中,除非有特殊的宣告,否則log都是以2為底的

時間複雜度是基礎語句執行次數t(n)的數量級問題。

涉及到主要問題:基礎語句,執行次數

1 每一次的常規執行都是1

2 宣告是不計時間的

3if/else的判斷執行次數是1,因為他只能執行if或者else

遞迴迭代法 :

public int function

(int n) else

}/**

根據這個**段,我們得到單次t(n)執行次數是 1 + t(n-1)的次數

有 t(n) = 1+t

(n-1);

**

t(n) = t(n-1) + 1

=t(n-2) + 1 + 1

=t(n-3) + 1 + 1

=....

=t(n-k) + k

得到這個一般式,利用t(1)=1的開口,另n-k=1,有k=n-1,則t(n)=n-1 ~ o(n)

常數級別 o(1)普通語句

線性級別 o(n) 迴圈

平方級別 o(n^2) 雙層巢狀

立方級別 o(n^3) 三層巢狀

以上都比較好分析

分析演算法最混亂的集中在對數方面,呈對數的都有一些特殊性,最常見的也就是二分策略、分治策略

ps:對數的底數和增長數量級並無關係,一般說明對數級別的時候就是logn

對數級別 o(logn) 二分策略-二分查詢

線性對數級別 o(nlogn) 分治策略-歸併排序

指數級別 o(a^n) 窮舉查詢-檢查所有子集

分治策略:乙個問題分成兩部分,先執行一部分,再執行另外一部分(o(nlogn))

見歸併排序

二分策略:乙個事情從中間劃分兩部分,根據條件判斷只需要執行其中的一部分(o(logn))

見二分查詢

乙個程式的空間複雜度是指執行完乙個程式所需記憶體的大小。

(1) 固定部分。這部分空間的大小與輸入/輸出的資料的個數多少、數值無關。主要包括指令空間(即**空間)、資料空間(常量、簡單變數)等所佔的空間。這部分屬於靜態空間。

(2) 可變空間,這部分空間的主要包括動態分配的空間,以及遞迴棧所需的空間等。這部分的空間大小與演算法有關。

具體看堆疊部分

第二章 演算法分析(1)

在這一章,我們將討論 我們將使用下面四個定義 如果存在正常數c和n0使得當n n0時t n cf n 則記為t n o f n 如果存在正常數c和n0使得當n n0時t n cg n 則記為t n omega f n t n h n 當且僅當t n o h n 和t n h n 如果對所有的常數c存...

第二章 演算法

本章內容了解即可。如果大家對資料結構完全不了解,我建議你先去看一下b站上郝斌老師的課程。演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的優先序列,並且每條指令表示乙個或多個操作。只聽資料結構課程,當然可以,但是聽完後你可能沒有什麼感覺,因為你不知道他是幹嘛的。但是如果配合演算法來講解,你就...

第二章 演算法

一 演算法定義 二 演算法的時間複雜度與空間複雜度 1.定義 演算法是解決待定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。2.演算法的特性 演算法有五個基本特性 輸入 輸出 有窮性 確定性和可行性。演算法在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸...