演算法分析
演算法分析主要集中在時間複雜度和空間複雜度
這裡也只是有所了解,演算法中常見的就那幾個級別,具體還是要看後面的演算法再了解
空間複雜度
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) ))時間複雜度是基礎語句執行次數t(n)的數量級問題。2 t1(n) * t2(n) ~ o(f1(n) * f2(n))
3 對於任意的常數k,有 (log n)^k ~ o(n) [對數增長十分緩慢]
ps:對於電腦科學中,除非有特殊的宣告,否則log都是以2為底的
涉及到主要問題:基礎語句,執行次數
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);
**
常數級別 o(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(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.演算法的特性 演算法有五個基本特性 輸入 輸出 有窮性 確定性和可行性。演算法在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸...