大O符號

衡量一個算法的空間/時間的復(fù)雜度。
注:具體使用,要根據(jù)對應(yīng)的數(shù)據(jù)量的多次做出選擇。

常用的復(fù)雜度:

O(1)

索引查找

O(log n)

對半查找

O(n)

數(shù)組遍歷和線性搜索

O(n log n)

最快的通用排序算法诅福,合并排序和堆排序

O(n^2)

插入排序

O(2^n)

你想避免這些算法,但有時你別無選擇需忿。僅向輸入添加一位會使運(yùn)行時間加倍诅炉。示例:旅行推銷員問題

O(n!)

階乘 慢得無法忍受。做任何事情都需要一百萬年的時間

image.png

以下是每個性能類別的一些示例:

O(1)

復(fù)雜度為 O(1) 的最常見示例是訪問數(shù)組索引屋厘。

let value = array[5]
O(1) 的另一個例子是從堆棧中壓入和彈出涕烧。

O(log n)

var j = 1
while j < n {
// do constant time stuff
j *= 2
}
不是簡單地增加,'j' 在每次運(yùn)行中增加 2 倍汗洒。

二進(jìn)制搜索算法是 O(log n) 復(fù)雜度的一個例子议纯。

在)

for i in stride(from: 0, to: n, by: 1) {
print(array[i])
}
數(shù)組遍歷和線性搜索是 O(n) 復(fù)雜度的例子。

O(n日志n)

for i in stride(from: 0, to: n, by: 1) {
var j = 1
while j < n {
j *= 2
// do constant time stuff
}
}
或者

for i in stride(from: 0, to: n, by: 1) {
func index(after i: Int) -> Int? { // multiplies i by 2 until i >= n
return i < n ? i * 2 : nil
}
for j in sequence(first: 1, next: index(after:)) {
// do constant time stuff
}
}
合并排序和堆排序是 O(n log n) 復(fù)雜度的例子溢谤。

O(n^2)

for i in stride(from: 0, to: n, by: 1) {
for j in stride(from: 1, to: n, by: 1) {
// do constant time stuff
}
}
遍歷一個簡單的二維數(shù)組和冒泡排序是 O(n^2) 復(fù)雜度的例子瞻凤。

O(n^3)

for i in stride(from: 0, to: n, by: 1) {
for j in stride(from: 1, to: n, by: 1) {
for k in stride(from: 1, to: n, by: 1) {
// do constant time stuff
}
}
}
O(2^n)

運(yùn)行時間為 O(2^N) 的算法通常是遞歸算法憨攒,通過遞歸地解決兩個大小為 N-1 的較小問題來解決大小為 N 的問題。以下示例打印了解決著名的 N 盤“漢諾塔”問題所需的所有步驟阀参。

func solveHanoi(n: Int, from: String, to: String, spare: String) {
guard n >= 1 else { return }
if n > 1 {
solveHanoi(n: n - 1, from: from, to: spare, spare: to)
solveHanoi(n: n - 1, from: spare, to: to, spare: from)
}
}
在8渭)

下面給出了花費(fèi) O(n!) 時間的最簡單的函數(shù)示例。

func nFactFunc(n: Int) {
for i in stride(from: 0, to: n, by: 1) {
nFactFunc(n: n - 1)
}
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛛壳,一起剝皮案震驚了整個濱河市杏瞻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衙荐,老刑警劉巖捞挥,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忧吟,居然都是意外死亡砌函,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門瀑罗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胸嘴,“玉大人,你說我怎么就攤上這事斩祭×酉瘢” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵摧玫,是天一觀的道長耳奕。 經(jīng)常有香客問我,道長诬像,這世上最難降的妖魔是什么屋群? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮坏挠,結(jié)果婚禮上芍躏,老公的妹妹穿的比我還像新娘。我一直安慰自己降狠,他們只是感情好对竣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榜配,像睡著了一般否纬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛋褥,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天临燃,我揣著相機(jī)與錄音,去河邊找鬼。 笑死膜廊,一個胖子當(dāng)著我的面吹牛乏沸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溃论,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屎蜓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钥勋?” 一聲冷哼從身側(cè)響起炬转,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎算灸,沒想到半個月后扼劈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菲驴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年荐吵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赊瞬。...
    茶點(diǎn)故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡先煎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出巧涧,到底是詐尸還是另有隱情薯蝎,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布谤绳,位于F島的核電站占锯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缩筛。R本人自食惡果不足惜消略,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞎抛。 院中可真熱鬧艺演,春花似錦、人聲如沸桐臊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豪硅。三九已至,卻和暖如春挺物,著一層夾襖步出監(jiān)牢的瞬間懒浮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砚著,地道東北人次伶。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像稽穆,于是被迫代替她去往敵國和親冠王。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評論 2 354

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

  • 知道算法有多快以及需要多少空間是非常有用的舌镶。 才能為你的工作選擇正確的算法柱彻。 O表示法給你一個算法的運(yùn)行時間和它使...
  • 大 O 符號[https://zh.wikipedia.org/wiki/%E5%A4%A7O%E7%AC%A6%...
    lio_zero閱讀 492評論 0 1
  • 大O符號(Big O notation), 又稱漸進(jìn)符號餐胀,是用于描述函數(shù)的漸近行為的數(shù)學(xué)符號哟楷。它是指用另一個(通常...
    ?葉閱讀 4,974評論 0 1
  • 一. 算法復(fù)雜度 算法 (Algorithm),是對特定問題求解步驟的一種描述否灾。解決一個問題往往有不止一種方法卖擅,算...
    大鵬的鵬閱讀 1,197評論 0 3
  • 1.算法概念 計(jì)算機(jī)科學(xué)中的算法指的就是計(jì)算機(jī)執(zhí)行的指令。 算法是計(jì)算機(jī)處理信息的本質(zhì)墨技,因?yàn)橛?jì)算機(jī)程序本質(zhì)上是一個...
    落寒z閱讀 8,334評論 3 2