複雜度分析

2021-08-21 07:53:42 字數 864 閱讀 5945

複雜度分析也是一種用來評價演算法的效能的方法,相比較時間的統計方法(依賴於平台)和指令計數的不切實際,複雜度分析只需要紙和筆來進行簡單的代數的計算

演算法的分析中,如果乙個演算法對於任何的問題規模,都需要相同的操作的次數,那麼他就是乙個常數階的效能。例子:列表的索引就是典型的常數階

對數階的效能要比線性階好一些,但是相比常數階要差。乙個對數階的演算法的工作量和問題的log2成正比,當問題的規模翻倍的時候,該演算法的工作量也就是只是多一次而已。

乙個多項式階的時間演算法的工作量,按照n^k的速率增加。其中k是乙個大於1 的常數。

比多項式的階更加複雜的是指數階。指數階的演算法對於較大的問題而言是不切實際的。

大o表示法

乙個演算法的工作量通常是乙個多項式的數項之和。當用多項式來表達工作量的時候,有乙個項是主項,隨著n的變大而越來越大,以至於可以忽視其他的項的工作量。

大o表示法的原理是:on the order of(在……階),這是對演算法的工作量的複雜度的一種表述,例如乙個線性演算法的階是o(n)

常量比例的作用

常量比例設計在o分析中經常會被忽略的項和係數。然而當項很大時候,他們可能會影響到演算法,對於較小的或者中等大小的資料的集合。更是如此。

以一下的**為例:

work=1

for x in range(problemsize):

work+=1

work-=1

注意以上的**除去迴圈自身,還有三行**,其中每一行都是賦值的語句,這三條語句中的每一條都需要常量時間,還要假設,在每一次的迭代中,隱藏在迴圈開始處的管理迴圈的開銷,也執行一條需要常量時間的指令,因此這個演算法所執行的抽象的工作量為3n+1。儘管n和3n+1這兩個工作量的執行時間都是按照相同的速率增加的。

複雜度分析 時間複雜度分析和空間複雜度分析

其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...

複雜度分析 時間複雜度 空間複雜度

執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...

複雜度分析(上)時間複雜度 空間複雜度

為了肉眼 實時 快速地來分析出 的複雜度,我們需要乙個不用具體的測試資料來測試,就可以粗略地估計演算法的執行效率的方法。時間複雜度 空間複雜度 表示演算法的執行時間與資料規模之間的增長關係。每行 對應的 cpu 執行的個數 執行的時間都不一樣,但是,我們這裡只是粗略估計,所以可以假設每行 執行的時間...