演算法分析 大O 大 大

2021-09-10 04:43:44 字數 2351 閱讀 3223

在演算法的學習中,最開始便是要學習演算法的分析。學習演算法分析時,我們便會接觸到這麼幾個符號:大o、大ω、大θ,常常讓人難以理解。

在通常的演算法分析時,我們可以明白,在輸入規模較小,各種演算法之間的時間消耗並無明顯差別。只有當輸入規模較大時,對各個演算法之間消耗差別的對比與分析才有意義。所以上面幾個符號便常用於表達當規模逐漸趨向於乙個極大數時的演算法複雜度。

在表示乙個演算法時間複雜度時,我們常用如t(n)=o(n^2)的形式表示,而在漸進分析中的 「=」 更傾向於 「」 的意思。打個比方:漸進表示式f(n) = o(g(n))所表達的意思是o(g(n)) = [ f(n),h(n),…,g(n) ], f(n) ∈ o(g(n))

f(x) = o(g(x)) 表示的含義是f(x)以g(x)為上界

大o是我們在分析演算法複雜度時最常用的一種表示法。當函式的大小只有上界,沒有明確下界的時候,則可以使用大o表示法,該漸進描述符一般用與描述演算法的最壞複雜度。f(x) = o(g(x))正式的數學定義:存在正常數c、n、n0,當 n>n0 的時,任意的 f(n) 符合 0 <= f(n) <= c.g(n)。

座標圖如下:

示例:下面是乙個很簡單的巢狀迴圈,在分析這種簡單演算法的複雜度時,我們通常計算其中關鍵步驟的執行次數作為此演算法的時間複雜度。

分析一:該演算法外層執行了 n 次迴圈,如果內層也是 n 次迴圈,我們便可知道該演算法時間複雜度為 n^2,但是該演算法內層執行的迴圈次數會隨著外層迴圈的進行依次減少,最大為n。所以,我們便可以確定該演算法的時間複雜度有乙個上界 n^2,即t(n) = o(n^2)。

分析二:另外我們可以採用最簡單的加法來判定該演算法複雜度,隨著外層的迴圈,內層執行的次數依次為 n、n-1、…、2、1,那麼關鍵步驟總的執行次數為等差數列的和 (n+1)*n/2, 展開即n^2/2 + n/2,以此也可確定乙個上界n^2,在我們使用o時,常有的乙個說法便是「o為取最高次數項去掉係數」。

for (int i = 0; i < n; i++) 

}

f(x) = ω(g(x)) 表示的含義是f(x)以g(x)為下界

當函式的大小只有下界,沒有明確的上界的時候,可以使用大ω表示法,該漸進描述符一般用與描述演算法的最優複雜度。f(n)= ω(g(n)) 正式的數學定義:存在正常數c、n、n0,當 n > n0 的時,任意的 f(n) 符合 0 <= c.g(n) <= f(n)。

座標圖如下:

簡析:為什麼我們通常把o用於分析最壞複雜度,把ω用於分析最優複雜度?

大ω描述的界是漸進最小,加入用大ω來描述最壞複雜度,因為這只是乙個下界,並不能說明演算法的最壞複雜度,所以沒意義。大o同理。

f(x) = θ(g(x)) 表示的含義是g(x)是f(x)的確界

用於界定函式的漸進上界和漸進下界。當 f(n)= θ(g(n)) 的時候,代表著g(n)為f(n)的漸進緊確界。而θ漸進描述符在所有的漸進描述符中是最嚴格的乙個,因為它既描述了函式的上界,有描述了函式的下界。

f(n)= θ(c.g(n)) 正式的數學定義:存在正常數c1、c2、n、n0,當 n > n0 的時,對於任意的f(n)對符合 c1.g(n) <= f(n) <= c2.g(n),c1.g(n)、c2.g(n)都是漸進正函式(當n趨於無窮大的時候,f(n)為正)。

座標圖如下:

演算法導論中還根據大o,大ω,大θ的定義得到以下定理:

當且僅當函式 f(n) = o(g(n)) 並且 f(n)= ω(g(n)) 時,才有 f(n) = θ(g(n))。

上圖橫軸代表輸入規模,數軸代表複雜度,由圖中的時間複雜度增長趨勢可以看出:

演算法分析——演算法的漸進效率分析 和 漸進符號大o、大ω、大θ、小o、小ω

演算法的時間複雜的分析 推導大O

在進行演算法分析時,語句總的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作t n o f n 它表示隨問題規模n的增大,演算法執行時間的增長率和f n 的增長率相同,稱作演算法的漸進演算法時間複雜度,簡稱...

演算法基礎 二 大O分析法 下

同樣,我們先看一段 你可以嘗試先自己分析一下它的時間複雜度 n 表示切片arrary的長度 func find arrary int,n int,x int pos int i 0 pos 1 for i可以看出來,這段 要事先的功能是,在乙個無序的切片中,查詢變數x出現的位置。如果沒有找到,就返回...

演算法中的大O理解

在描述演算法複雜度時,經常用到o 1 o n o logn o nlogn 來表示對應演算法的時間複雜度,這裡進行歸納一下它們代表的含義 這是演算法的時空複雜度的表示。不僅僅用於表示時間複雜度,也用於表示空間複雜度。o後面的括號中有乙個函式,指明某個演算法的耗時 耗空間與資料增長量之間的關係。其中的...