複雜度 O、Θ、Ω、o、ω,別再傻傻分不清了!

2021-02-13 Java技術棧

Java技術棧

www.javastack.cn

關注閱讀更多優質文章

轉自公眾號:彤哥讀源碼

前言

在我們表示複雜度的時候,通常使用大O來表示。

但是,在其他書籍中,你可能還見過Θ、Ω、o、ω等符號。

那麼,這些符號又是什麼意思呢?

本節,我們就來解決這個問題。

讀音

我們先來糾正一波讀音:

O,/əʊ/,大Oh

o,/əʊ/,小oh

Θ,/ˈθiːtə/,theta

Ω,/oʊˈmeɡə/,大Omega

ω,/oʊˈmeɡə/,小omega

是不是跟老師教得不太一樣^^

數學解釋Θ

Θ定義了一種精確的漸近行為(exact asymptotic behavior),怎麼說呢?

用函數來表示:

對於f(n),存在正數n0、c1、c2,使得當 n>=n0 時,始終存在 0 <= c1*g(n) <= f(n) <= c2*g(n),則我們可以用 f(n)=Θ(g(n))表示。

用圖來表示:

Θ同時定義了上界和下界,f(n)位於上界和下界之間,且包含等號。

比如說,f(n) = 2n^2+3n+1 = Θ(n^2),此時,g(n)就是用f(n)去掉低階項和常數項得來的,因為肯定存在某個正數n0、c1、c2,使得 0 <= c1*n^2 <= 2n^2+3n+1 <= c2*n^2,當然,你說g(n)是2*n^2也沒問題,所以,g(n)實際上滿足這個條件的一組函數。

好了,如果Θ你能理解了,下面四個就好理解了。

O

O定義了算法的上界。

用函數來表示:

對於f(n),存在正數n0、c,使得當 n>=n0 時,始終存在 0 <= f(n) <= c*g(n),則我們可以用 f(n)=O(g(n))表示。

用圖來表示:

O只定義上界,只要f(n)不大於c*g(n),就可以說 f(n)=O(g(n))。

比如說,對於插入排序,我們說它的時間複雜度是O(n^2),但是,如果用Θ來表示,則必須分成兩條:

最壞的情況下,它的時間複雜度為Θ(n^2);

最好的情況下,它的時間複雜度為Θ(n)。

這裡的n^2隻是g(n)這一組函數中最小的上界,當然,g(n)也可以等於n^3。

不過,我們一般說複雜度都是指的最小的上界,比如,這裡插入排序的時間複雜度如果說是O(n^3),從理論上來說,也沒問題,只是不符合約定罷了。

插入排序最好的情況就是數組本身就是有序的。

o

o定義的也是算法的上界,不過它不包含等於,是一種不精確的上界,或者稱作松上界(某些書籍翻譯為非緊上界)。

用函數來表示:

對於f(n),存在正數n0、c,使得當 n>n0 時,始終存在 0 <= f(n) < c*g(n),則我們可以用 f(n)=o(g(n))表示。

用圖來表示:

o表示僅僅是大O去掉等於的情況,其他行為與大O一模一樣。

Ω

Ω定義了算法的下界,與O正好相反。

用函數來表示:

對於f(n),存在正數n0、c,使得當 n>=n0 時,始終存在 0 <= c*g(n) <= f(n),則我們可以用 f(n)=Ω(g(n))表示。

用圖來表示:

Ω只定義下界,只要f(n)不小於c*g(n),就可以說 f(n)=Ω(g(n))。

比如,對於插入排序,我們可以說它的時間複雜度為Ω(n),不過,這通常沒有什麼意義,因為插入排序在最好的情況下很少,基本都是在最壞情況或者平均情況。

ω

ω同樣定義的是下界,只不過不包含等於,是一種不精確的下界,或者稱作松下界(某些書籍翻譯為非緊下界)。

用函數來表示:

對於f(n),存在正數n0、c,使得當 n>n0 時,始終存在 0 <= c*g(n) < f(n),則我們可以用 f(n)=ω(g(n))表示。

用圖來表示:

ω表示僅僅是大Ω去掉等於的情況,其他行為與大Ω一模一樣。

通俗理解符號含義通俗理解Θ精確的漸近行為相當於「=」O上界相當於「<=」o松上界相當於「<」Ω下界相當於「>=」ω松下界相當於「>」小結

為了幫助同學們快速查閱英文資料,彤哥特地把這幾節涉及到的英語單詞彙總了一下:

漢語英文複雜度complexity時間複雜度time complexity空間複雜度space complexity漸近分析asymptotic analysis最壞情況the worst case最好情況the best case平均情況the average case精確的漸近行為exact asymptotic behavior低階項low order terms常數項(前置常數)leading constants松上界loose upper-bound後記本節,我們分別從讀音、數學、通俗理解等三個方面闡述了Θ、O、o、Ω、ω的含義,並在最後給出了這幾節涉及到的術語對應的英文,有了這些英文,你也可以快速地查閱這方面的資料。不過,在我們平時與人交流的過程中,大家還是習慣於使用大O表示法,一來它表示最壞情況,最壞情況通常可以直接代表算法的複雜度,二來它比較好書寫。所以,我們只需要記住大O就可以了,只不過在別人提到Θ、Ω、ω我們知道是什麼含義就可以了。

相關焦點

  • 別再傻傻分不清!魚肝油當魚油長期服用或致中毒
    原標題:魚油還是魚肝油,別再傻傻分不清 尤其很多人反映,對魚油、魚肝油兩者傻傻分不清,以致在服用時產生混淆,魚肝油和魚油僅一字之差,但實際上完全不同,錯誤服用,不僅起不到預期效果,還可能損傷健康。3系多不飽和脂肪酸(DHA和EPA),有助調節血脂、大腦發育等。
  • 比如α,β,γ,δ,ε,λ,ζ,η,θ,ξ,σ,φ,ψ,ω等等的讀音
    磁通係數;角度;係數3、 Γ γ gamma ga:m 伽馬 電導係數(小寫)4、 Δ δ delta delt 德爾塔 變動;密度;屈光度5、 Ε ε epsilon ep`silon 伊普西龍 對數之基數6、 Ζ ζ zeta zat 截塔 係數;方位角;阻抗;相對粘度;原子序數7、 Η η eta eit 艾塔 磁滯係數;效率(小寫)8、 Θ θ
  • 魚油VS魚肝油,別再傻傻分不清
    很多人反映,對魚油、魚肝油傻傻分不清。魚肝油和魚油僅一字之差,但實際上完全不同,錯誤服用不僅起不到預期效果,還可能損傷健康。3系多不飽和脂肪酸(DHA和EPA),有助大腦發育、調節血脂等。陳超剛說,最出名的要數「地中海飲食」,希臘、西班牙、義大利南部等處於地中海沿岸的南歐各國,飲食以蔬菜水果、魚類、五穀雜糧、豆類和橄欖油為主,其中,魚類食譜中,有鯖魚、鮭魚和沙丁魚等深海魚,它們能提供這一重要的不飽和脂肪酸,這類脂肪酸與降低患心臟病的風險有關聯。
  • PNAS:Ω3不飽和脂肪酸或可抑制老年黃斑變性患者眼部的血管生成
    近日,刊登在國際雜誌PNAS上的一篇研究論文中,來自哈佛大學醫學院的研究人員通過研究首次闡明了Ω(ω)-3長鏈多不飽和脂肪酸(LCPUFAs)、DHA和EPA以及細胞色素P450(CYP)衍生的特殊生物活性產物,可以通過調節患處微環境免疫細胞的募集來影響脈絡膜新血管生成以及眼部血管的滲漏。
  • 20、函數y=Asin(ωx+φ)的圖像及應用
    相關結論考點自測函數y=Asin(ωx+φ)的圖象及變換 求函數y=Asin(ωx+φ)的解析式函數y=Asin(ωx+φ解題心得解決三角函數圖象與性質綜合問題的方法:先將y=f(x)化為y=asin x+bcos x的形式,再用輔助角公式化為y=Asin(ωx+φ)的形式,最後藉助y=Asin(ωx+φ)的性質(如周期性、對稱性、單調性等)解決相關問題.
  • 吳國平:高考數學110分必會熱點-函數y=sin(ωx+φ)的圖象及應用
    高考函數知識內容比較多,高考函數熱點問題一般集中在這四個板塊:導數應用、與不等式綜合、三角函數應用、函數模型應用。三角函數相關知識內容可以說是高考數學試題當中的比較常考知識內容,也一直是高考數學必會考查的知識點。
  • 高考加油,函數y=Asin(ωx+φ)有關的題型
    再根據所得函數是奇函數,則π/4﹣2φ=kπ,k∈Z,則φ的最小正值為π/8,故選:D.考點分析:函數y=Asin(ωx+φ)的圖象變換.題幹分析:利用三角恆等變換化簡f(x)的解析式,再利用正弦函數的奇偶性,求得φ的最小正值.典型例題分析2:已知函數f(x)=sin(ωx+φ)(ω>0,|φ|<π/2)的部分圖象如圖所示.
  • 詞根系列|THE/THEO 「god」 - 巧記詞根
    詞根the(o)來自希臘名詞theos "god 神", From PIE root *dhes- "forming words for religious concepts".the(o)思維導圖theo相關詞彙:theology 英 [θildi] 美 [θiɑldi] n.
  • 梳理Ω-3脂肪酸功能研究最新進展
    該研究報導,食用ω- 3脂肪酸七年之後,相比安慰劑組,處於「超高」風險的年輕人不太可能遭受精神衰弱的情況。近十年前,由墨爾本大學Paul Amminger領導的研究人員的臨床試驗中顯示,攝入脂肪酸會推遲高危對象精神病性障礙的首次發病。
  • 《柳葉刀》:ω-3脂肪酸攝入不足是全球性的難題
    「研究估計,全球五分之一的死亡人數(相當於1100萬人)與不健康膳食有關,而且不健康膳食會在全球引起一系列慢病。」 「這項研究證實了許多人多年來的想法,即不健康膳食是導致全球死亡人數最多的風險因素。」195種食品中,ω-3脂肪酸,多不飽和脂肪酸攝入不足的,那這些脂肪酸究竟有啥用處呢?小編現在來給大家科普一下哈
  • 【Four in Love】系列聯誼活動預告(信息量略大,小夥伴們要認真看嚶o(* ̄▽ ̄*)o )
    沒關係,我們都幫你考慮到了~\(≧▽≦)/~ 報名契約情侶的小夥伴們,主辦方會提前根據你的資料要求,把合適的對象列成一組,然後……然後你們就一起來參加籤約前夜的單身party吧////// 我們會根據你們在party結束後的反饋再參考之前的要求分配情侶組合喔(づ ̄3 ̄)づ 所以,放心大膽地來報名吧
  • 臨床大發現:含ω-3脂肪酸的食物要多吃!
    Sala-Vila在一項納入了944名ST段抬高型心肌梗死(STEMI)患者的前瞻性研究中發現,患者發生STEMI時,長鏈ω-3脂肪酸二十碳五烯酸(EPA)每增加一個標準差(SD),與患者後續出現不良心血管事件風險下降16%相關,也與因心血管原因再入院的風險降低20%相關
  • 高中數學創新微練—函數y=Asin(ωx+φ)的綜合應用
    高考對三角函數的考查主要是通過三角變換,將其轉化為y=Asin(ωx+φ)的形式,再研究其性質(定義域、值域、單調性、奇偶性、對稱性、周期性等),函數y=Asin(ωx+φ)性質綜合應用是三角函數的核心內容。
  • 時空複雜度(時間複雜度/空間複雜度)O(1)、O(n)、O(n^2)、O(log n)、O(n log n)是什麼意思?
    它描述了時空複雜度.大O符號是我在大學裡學過的東西之一,我了解過這個算法的概念。我知道的不算多,可以回答一些基本的問題,僅此而已。從大學畢業以後,我對這個算法的了解基本沒有改變,因為自從我開始工作以來,我沒有使用過它,也沒有聽到任何同事提到過它。所,我想我應該花點時間回顧一下它,並在這篇文章中總結大O符號的基礎知識,以及一些代碼示例來幫助解釋它。什麼是大O符號?
  • 三角函數圖像與性質及函數y=Asin(ωx+∮)的圖像變換的深度剖析
    三角函數作為高考必考章節,雖說定位之高,但是考查題型比較固定,屬於送分題型,不知各位親們,看了這句話作何感想?送分?怎麼可能?那多公式,我至今不記得,學過就忘掉。。。。。。有的同學可能要說,不就是正餘弦,正切函數嗎?不假,再加上一個餘切更完美了,如果再添上正割餘割就更加 beautiful啦!哈哈,正割餘割高中階段不做要求,不考,我們也就不贅述啦。