Swift算法俱樂部中文版 -- 關(guān)于符號(hào)O的解釋

知道算法有多快以及需要多少空間是非常有用的迫卢。 才能為你的工作選擇正確的算法哮肚。

O表示法給你一個(gè)算法的運(yùn)行時(shí)間和它使用的內(nèi)存量的粗略表示雅倒。 當(dāng)有人說绅络,“這種算法最糟糕的運(yùn)行時(shí)間是O(n ^ 2),使用O(n)空間”狈茉。意思是它很慢夫椭,但不需要大量額外的內(nèi)存。

計(jì)算算法的O通常通過數(shù)學(xué)分析來完成氯庆。 我們跳過這里的數(shù)學(xué)蹭秋,但是了解不同的值意味著什么是有用的,所以這里是一個(gè)方便查閱的表堤撵。 n指您正在處理的數(shù)據(jù)項(xiàng)數(shù)仁讨。 例如,當(dāng)對(duì)100個(gè)項(xiàng)目的數(shù)組進(jìn)行排序時(shí)实昨,n = 100洞豁。

大O ?名字 ?說明
O(1) ?常量 這是最好的。 該算法不管有多少數(shù)據(jù)荒给,總是花費(fèi)相同的時(shí)間丈挟。 示例:通過索引查找數(shù)組的元素。
O(log n) 對(duì)數(shù) 特別好志电。 該算法將每次迭代的數(shù)據(jù)量減半曙咽。 如果你有100個(gè)元素,它需要大約7個(gè)步驟來找到答案溪北。 有1000個(gè),需要10個(gè)步驟夺脾。 100萬個(gè)只需要20步之拨。 即使對(duì)于大量的數(shù)據(jù),這也是超快的咧叭。 示例:二進(jìn)制搜索蚀乔。
O(n) 線性 很好。 如果你有100個(gè)元素菲茬,需要100個(gè)步驟吉挣。 元素個(gè)數(shù)增加一倍派撕,該算法花費(fèi)的時(shí)間會(huì)是兩倍。 示例:順序搜索睬魂。
O(n log n) 線性代數(shù) 體面的表現(xiàn)终吼。 這比線性稍差,但不太差氯哮。 示例:最快的通用排序算法际跪。
O(n^2) 二次 有點(diǎn)慢。 如果你有100個(gè)元素喉钢,要執(zhí)行100 ^ 2 = 10,000步驟姆打。 加倍的元素?cái)?shù)量使其慢四倍(因?yàn)?平方等于4)。 示例:使用嵌套循環(huán)的算法肠虽,如插入排序幔戏。
O(n^3) ?三次 很慢。 如果你有100元素税课,會(huì)是100 ^ 3 = 1,000,000步驟闲延。 輸入大小加倍使其慢8倍。 示例:矩陣乘法伯复。
O(2^n) 指數(shù) 特別慢。 你想避免這些算法啸如,但有時(shí)你沒有選擇。 添加一個(gè)元素就會(huì)使運(yùn)行時(shí)間加倍想暗。 示例:旅行推銷員問題
O(n!) 階乘 無法忍受的慢。 一百萬年也運(yùn)行不完帘不。

通常你不需要數(shù)學(xué)方式計(jì)算一個(gè)算法的?大O说莫,但你可以簡(jiǎn)單地使用你的直覺。 如果你的代碼使用一個(gè)循環(huán)寞焙,看看你的輸入的所有n個(gè)元素储狭,算法是 O(n) 。 如果代碼有兩個(gè)嵌套循環(huán)捣郊,它是 O(n ^ 2) 辽狈。 三個(gè)嵌套循環(huán)給出 O(n ^ 3) ,等等呛牲。

上面的表示法是一個(gè)估計(jì)刮萌,只對(duì)較大數(shù)量的元素真正有用。 例如娘扩,插入排序算法的最壞情況運(yùn)行時(shí)間是 O(n ^ 2) 壮锻。 在理論上比合并排序的最壞情況運(yùn)行時(shí)間是 O(n log n) 。 但對(duì)于少量的數(shù)據(jù)涮阔,插入排序?qū)嶋H上更快澎语,特別是如果數(shù)組的一部分已經(jīng)排序途事!

如果你覺得這個(gè)很混亂擅羞,不要讓這個(gè)表格打擾你太多尸变。 當(dāng)比較兩個(gè)算法以確定哪一個(gè)更好時(shí),它是最有用的减俏。 但是最終你還是想在實(shí)踐中測(cè)試哪一個(gè)真正是最好的召烂。 如果數(shù)據(jù)量相對(duì)較小娃承,即使緩慢的算法在實(shí)際運(yùn)行中也很快。

英文鏈接:
https://github.com/raywenderlich/swift-algorithm-club/blob/bad00fedaa8d0b7ca3408e7d02bc421349f83bb1/Big-O%20Notation.markdown

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末麻削,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扫责,更是在濱河造成了極大的恐慌,老刑警劉巖苏揣,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吐葱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡孟辑,警方通過查閱死者的電腦和手機(jī)蔫敲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門饲嗽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奈嘿,你說我怎么就攤上這事貌虾。” “怎么了裙犹?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵尽狠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我叶圃,道長(zhǎng)袄膏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮赫舒,結(jié)果婚禮上悍及,老公的妹妹穿的比我還像新娘。我一直安慰自己接癌,他們只是感情好心赶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缺猛,像睡著了一般缨叫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荔燎,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天耻姥,我揣著相機(jī)與錄音,去河邊找鬼有咨。 笑死琐簇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播婉商,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼似忧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了丈秩?” 一聲冷哼從身側(cè)響起盯捌,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蘑秽,沒想到半個(gè)月后饺著,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肠牲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年幼衰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀雳。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡塑顺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俏险,到底是詐尸還是另有隱情严拒,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布竖独,位于F島的核電站裤唠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏莹痢。R本人自食惡果不足惜种蘸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竞膳。 院中可真熱鬧航瞭,春花似錦、人聲如沸坦辟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锉走。三九已至滨彻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挪蹭,已是汗流浹背亭饵。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梁厉,地道東北人辜羊。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親八秃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庇麦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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

  • 目標(biāo):從小到大(或從大到小)對(duì)數(shù)組進(jìn)行排序喜德。 給你一組數(shù)組,將他們排序垮媒。插入排序算法的步驟如下: 把未排序的數(shù)字放...
    云抱住陽光太陽沒放棄發(fā)亮閱讀 1,754評(píng)論 0 7
  • 本文分析冒泡舍悯、選擇、插入睡雇、希爾萌衬、快速、歸并和堆排序它抱,為不影響閱讀體驗(yàn)秕豫,將關(guān)于時(shí)間、空間復(fù)雜度和穩(wěn)定性的概念放在博文...
    DeppWang閱讀 427評(píng)論 0 2
  • 該系列文章主要是記錄下自己暑假這段時(shí)間的學(xué)習(xí)筆記观蓄,暑期也在實(shí)習(xí)混移,抽空學(xué)了很多,每個(gè)方面的知識(shí)我都會(huì)另起一篇博客去記...
    Yanci516閱讀 12,212評(píng)論 6 19
  • 停機(jī)概率侮穿,又稱蔡廷常數(shù)(Chaitin's constant)是將充分長(zhǎng)的0-1隨機(jī)串輸入一臺(tái)無前綴(prefi...
    十酒三閱讀 2,219評(píng)論 3 2
  • 二零一六年七月十一日歌径,是我們初相見的日子!從學(xué)星酌回家回铛,剛到家,便被告知家里新進(jìn)一員克锣,原來就是你呀茵肃。我激動(dòng)的去找你。...
    楠花一笑徒傷悲閱讀 330評(píng)論 0 0