大 O 表示法初學(xué)指南

簡評:任何讀過「編程珠璣」或任何其他計(jì)算機(jī)科學(xué)書籍的人都會遇到涉及O(N log N)或其他看似奇怪的語法的章節(jié)员凝,本文將幫助了解大 O 的基礎(chǔ)知識懒鉴。

大 O 表示法用來在計(jì)算機(jī)科學(xué)中描述算法的性能或復(fù)雜性盟萨,大 O 具體描述了最壞的情況鼓拧,并且可以描述算法所需的執(zhí)行時(shí)間或所使用的空間(內(nèi)存或磁盤)嗜傅。

作為程序員和數(shù)學(xué)家瘦锹,我發(fā)現(xiàn)了徹底理解大 O 的最好方法是在代碼中生成一些例子畦戒,下面是一些常見的增長順序以及可能的描述和示例方库。

O(1)

O(1) 描述了一種無論輸入數(shù)據(jù)集的大小如何總是在相同的時(shí)間(或空間)內(nèi)運(yùn)行的算法。

bool IsFirstElementNull(IList<String> elements)
{
    return elements[0] == null;
}

O(N)

O(N) 描述了一種性能線性增長并且與輸入數(shù)據(jù)集的大小成正比的算法障斋。下面的示例還演示了大 O 如何支持最壞情況的性能方案纵潦,在循環(huán)的任何一個(gè)迭代期間都可以找到匹配的字符串,并且函數(shù)將提前返回垃环,但是大 O 表示法將始終假定算法將執(zhí)行最大的迭代次數(shù)邀层。

bool ContainsValue(IEnumerable<string> elements, string value)
{
    foreach (var element in elements)
    {
        if (element == value) return true; 
    } 
    return false; 
}

O(N2)

O(N2) 表示一種性能與輸入數(shù)據(jù)集大小的平方成正比的算法,常見于涉及數(shù)據(jù)集嵌套迭代的算法中遂庄。更深的嵌套迭代將導(dǎo)致 O(N3)寥院、O(N?) 等。

bool ContainsDuplicates(IList<string> elements)
{
    for (var outer = 0; outer < elements.Count; outer++) 
    {
        for (var inner = 0; inner < elements.Count; inner++) 
        { 
            // Don't compare with self 
            if (outer == inner) continue; 
            if (elements[outer] == elements[inner]) return true; 
        }
    }
    return false;
}

O(2^N)

O(2^N) 表示一種隨著對輸入數(shù)據(jù)集的每次加法而增長加倍的算法涛目。O(2^N) 函數(shù)的增長曲線是指數(shù) —— 從非常小的開始秸谢,然后是急劇上升。O(2^N) 函數(shù)的一個(gè)例子是 Fibonacci 數(shù)的遞歸計(jì)算:

int Fibonacci(int number)
{
    if (number <= 1) return number;
    return Fibonacci(number - 2) + Fibonacci(number - 1); 
}

希望這有助于消除圍繞大 O 符號和許多常見增長函數(shù)的一些謎團(tuán)霹肝,在處理需要大規(guī)模操作的算法時(shí)估蹄,掌握大 O 是一個(gè)重要的工具,允許在處理不同的數(shù)據(jù)集時(shí)做出正確的選擇沫换。


原文鏈接:A beginner's guide to Big O notation
推薦閱讀:給 console 添加顏色

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末臭蚁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子讯赏,更是在濱河造成了極大的恐慌垮兑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漱挎,死亡現(xiàn)場離奇詭異甥角,居然都是意外死亡恬叹,警方通過查閱死者的電腦和手機(jī)晚岭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來对雪,“玉大人怜庸,你說我怎么就攤上這事当犯。” “怎么了割疾?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵嚎卫,是天一觀的道長。 經(jīng)常有香客問我,道長拓诸,這世上最難降的妖魔是什么侵佃? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮奠支,結(jié)果婚禮上馋辈,老公的妹妹穿的比我還像新娘。我一直安慰自己倍谜,他們只是感情好迈螟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尔崔,像睡著了一般答毫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上季春,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天洗搂,我揣著相機(jī)與錄音,去河邊找鬼载弄。 笑死蚕脏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侦锯。 我是一名探鬼主播驼鞭,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尺碰!你這毒婦竟也來了挣棕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤亲桥,失蹤者是張志新(化名)和其女友劉穎洛心,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體题篷,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡词身,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了番枚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片法严。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖葫笼,靈堂內(nèi)的尸體忽然破棺而出深啤,到底是詐尸還是另有隱情,我是刑警寧澤路星,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布溯街,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏呈昔。R本人自食惡果不足惜挥等,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堤尾。 院中可真熱鬧肝劲,春花似錦、人聲如沸哀峻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剩蟀。三九已至,卻和暖如春切威,著一層夾襖步出監(jiān)牢的瞬間育特,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工先朦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缰冤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓喳魏,卻偏偏與公主長得像棉浸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子刺彩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,936評論 2 89
  • 游戲里迷郑,物理攻擊雖然厲害,但只能傷害到一個(gè)人创倔,有一種魔法攻擊會形成“恐慌效果”嗡害,一旦施加,就無法避免(強(qiáng)力凈化畦攘?)...
    孤遠(yuǎn)閱讀 177評論 0 1
  • 001想要了解基本沖突的本質(zhì)霸妹,只需要觀察那些對自我的認(rèn)同感更強(qiáng)的個(gè)體就可以了,主要分為三類: 順從型知押、對抗型和疏離...
    咿呀作語閱讀 102評論 0 1
  • 或轟轟烈烈叹螟,或平平淡淡,富蕴ǘⅲ或貧困首妖,一生短暫,適可而止爷恳。2017.03.09 淡了有缆,漸漸,像寄生蟲一樣,他只是愛屋...
    Sivan戳爺閱讀 177評論 0 0
  • 文/販賣夢的小托 這是一個(gè)神奇的世界 有一個(gè)族群棚壁,他們生活在水里 他們浮出水面的臉杯矩,有一點(diǎn)像河童 但是比河童更扭曲...
    ___的小托閱讀 1,077評論 0 0