2 演算法複雜度度量

2021-08-06 08:07:33 字數 1088 閱讀 2919

1.時間複雜度

特定演算法處理規模為n的問題所需要的時間可記作t(n),嚴格來說這個定義並不明確。為此需要做進一步簡化,即從保守估計的角度出發,在規模為n的所有輸入中選擇執行時間最長者作為t(n),並以t(n)度量該演算法的時間複雜度。

2.漸進複雜度

著重長遠、更為注重時間複雜度的總體變化趨勢和增長速度的策略與方法,即所謂的漸進分析(asymptotic analysis)。那麼,針對足夠大的輸入規模n,演算法執行時間t(n)的漸進增長速度應該如何評價和度量?引入以下幾個符號。

2.1大o記號(

big-o)

出於保守估計,我們首先關注t(n)的漸進上屆。為此可引入所謂「大o記號」(

big-o)。具體地,若存在正的常數c和函式f(n),使得對任何n>>2都有

則可認為在n足夠大之後,f(n)給出了t(n)增長速度的乙個漸進上界。此時記之為:

由這一定義,可以匯出大o記號的以下性質:

(1)對於任一常數c>0,有

(2)對於任意常數a>b>0,有

「最壞情況複雜度」是人們關注且使用最多的。

2.2大ω記號(

big-omega)

為了對演算法的最好情況做出估計,需要借助另乙個符號。如果存在正的常數c和函式g(n),使得對於任何n>>2都有

就可以認為,在n足夠大之後,g(n)給出了t(n)的乙個漸進下屆。此時我們記之為:

這裡的ω稱作「大ω記號」。與大o記號恰恰相反,大ω記號是對演算法執行效率的樂觀估計——對於規模為n的任意輸入,演算法的執行時間都不低於ω(g(n))。比如在最好的情況下,起泡排序也至少需要t(n)=ω(n)的計算時間。

2.2大θ記號(big-theta)

借助大o記號和大ω記號可以對演算法的時間複雜度做出定量的界定,亦即,從漸進的趨勢看,t(n)界於ω(g(n))和o(f(n))之間。恰巧出現g(n)=f(n)的情況,可以使用另一記號來表示。

如果存在正的常數c1>2都有

就可以認為在n足夠大之後,h(n)給出了t(n)的乙個確界。此時,我們記之為:

t(n)=θ(h(n))

這裡的θ稱作「大θ記號」,它是對演算法複雜度的準確估計——對於規模為n的任何輸入,演算法的執行時間t(n)都與θ(h(n))同階。

1 1複雜度度量

1.1複雜度度量 1.漸進複雜度 1.大o oo記號 漸進上界 當n足夠大之後 若存在正常數c和函式f n 使得對任意任意 n 2 遠遠大於2 都有 t n c f n 則可以認為n在足夠大之後,f n 給出了t n 增長速度的乙個漸進上界。此時,記之為t n o f n 由這一定義,可以匯出大o ...

演算法效率度量 時間複雜度和空間複雜度

演算法效率的度量是通過時間複雜度和空間複雜度來描述的。乙個語句的頻度是指該語句在演算法中被重複執行的次數。演算法中所有語句的頻度之和記作t n 它是該演算法問題規模n的函式,時間複雜度主要分析t n 的數量級。演算法中的基本運算 最深層迴圈內的語句 的頻度與t n 同數量級,所以通常釆用演算法中基本...

如何度量複雜度

我們以度量複雜度的3種方法作為本文的結束 用邏輯深度度量複雜性為了更加接近我們對複雜性的直覺,數學家班尼特在20世紀80年代初提出了邏輯深度 logical depth 的概念。乙個事物的邏輯深度是對構造這個事物的困難程度的度量。高度有序的a c g t序列顯然很容易構造。同樣,如果我要你給我乙個a...