演算法複雜度 演算法從入門到精通3之演算法複雜度(二)

2021-10-16 02:23:58 字數 1626 閱讀 1933

#演算法系列#

o(1)是最好的演算法時間複雜度,也就是說同比效率最高的演算法。其中的1表示的不是1次,之前有個同學問我,如果是消耗2個單位時間的時間複雜度是不是記為o(2)呢?不是。不論演算法消耗幾個單位時間,只要是這個時間不隨著n的漸進性變化而變化,也就是這個單位時間永遠都是2個、或者永遠都是10個。這樣的時間複雜度都記作o(1)。

是不是所有o(1)時間複雜度的演算法的執行時間都相等呢?不是,上面說了o(1)可能是2個單位時間,也可能是10個單位時間;再者,電腦的硬體不同、環境不同,哪怕同乙個演算法在不同機器上執行所消耗的時間都是不一樣的,但是他們的時間複雜度都是o(1)。所以時間複雜度都是o(1)的,所消耗的時間是不相等的。如下圖,增長是一條水平的直線。

o(n)是線性增量的時間複雜度,也成為線性時間複雜度。因為其時間變化是線性增長的。

在此,先要說清楚什麼是線性增長,線性增長也可以稱為等速增長。比如2n+2這個函式就是線性增長,因為當n為1的時候2n+2=4,當n=2的時候為6,當n=3的時候為8,每次都是增量都是2,等量增長,也是等速增長。這樣的增長成為線性增長。如下圖,增長是一條直線。

o(n^2)這種時間複雜度的演算法,隨著n的增大其計算速度也是越來越慢,慢下來的速度是非常快。也就是相比o(n)而言,時間複雜度是o(n^2)的演算法執行時間相對來說所花費的時間更長。比如氣泡排序就是這種時間複雜度。如下圖:

o(logn)是一種對數型別的時間複雜度。

對數的概念先給大家複習一下,比如2^x=n,轉換對數就是以2為底數n的對數,記作log2 n(此處的2應該放到log下角,並且寫小一點,但是計算機打不出來我用空格以示區分)。比如以2為底8的對數是3,記作log2 8=3.

所以,當n非常大的時候,時間複雜度的增長反而比較小。因為n=256的時候,log2 256=8。也就是n為256但是o(logn)時間複雜度反而只是8。因此o(logn)複雜度的演算法也是相對來說比較優秀的演算法。增量如下圖:

o(nlogn)時間複雜度的概念在了解了o(logn)之後應該會有乙個粗略的推測了。比如log2 256=8,那麼nlog就是256(log2 256)=256*8,這種增速比o(n)要大,但是比o(n^2)要小,所以圖示如下:

時間複雜度上o(1)

本節將一些常見的時間複雜度列出來,目的有兩個,一是讓大家能更深入一點了解時間複雜度;二是對後面可能出現的一些數學公式做一些複習。以便後面的內容能直接引用。

回溯演算法,從入門到精通

回溯演算法在資料結構中式一種常用的演算法,也是一種暴力求解法,基本思想是深度遍歷,選擇一條路一步一步走,當走不通的時候或者已經求的正確的結果,返回上一步,接著選擇另一條路走,直到遍歷完所有節點。回溯演算法是一種思想,真正用 實現的時候,大多時候都需要用的方法是遞迴。一.回溯演算法最出名的是8皇后問題...

演算法 演算法複雜度

演算法通俗的來說就是解決一些問題方法和步驟,那麼衡量演算法的標準有如下 1.時間複雜度 時間複雜度也就是通常所說的演算法執行所需要耗費的時間,時間越短,演算法越好,當然也有解釋是程式要執行的次數,而不是程式執行的時間,因為有些機器效能高,程式執行的速度快,二有些機器效能一般執行就慢,所以這裡就不能用...

演算法複雜度

就不加高亮度了。不是特能算這複雜度,但走軟體這條路是務必會算的。定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,...