時(shí)間復(fù)雜度

CS基礎(chǔ):算法時(shí)間復(fù)雜度

此篇為大話數(shù)據(jù)結(jié)構(gòu)的筆記之一帖世,涉及到編碼的部分采用 Swift 最新版本來(lái)進(jìn)行編程笨奠。序比較亂假夺,幾乎屬于想到啥查啥寫啥涧衙。

時(shí)間復(fù)雜度

算法分析中的一個(gè)名詞哪工,即輸入到輸出經(jīng)過(guò)這個(gè)算法所經(jīng)歷的時(shí)間。

語(yǔ)句總的執(zhí)行次數(shù) T(n)是關(guān)于問(wèn)題規(guī)模 n 的函數(shù)弧哎,勁兒分析 T(n) 隨著 n 的變化情況并確定 T(n) 的數(shù)量級(jí)雁比。T(n) = O(f(n)),這個(gè)公式表示隨著問(wèn)題規(guī)模 n 的增大撤嫩,算法執(zhí)行時(shí)間的增長(zhǎng)率和 f(n)的增長(zhǎng)率相同偎捎,f(n)是問(wèn)題規(guī)模 n 的某個(gè)函數(shù)。這種時(shí)間復(fù)雜度的記法稱為大 O 記法序攘。

最優(yōu)算法:隨著規(guī)模 n 的增大茴她,T(n)增長(zhǎng)最慢的算法。

推導(dǎo)大 O 階方法

基本原則:

  • 用常數(shù) 1 取代運(yùn)行時(shí)間中的所有加法常數(shù)程奠。
  • 在修改后的運(yùn)行次數(shù)函數(shù)中丈牢,只保留最高階項(xiàng)。
  • 如果最高項(xiàng)存在且不是1瞄沙,則去除與這個(gè)項(xiàng)相乘的常數(shù)己沛。

經(jīng)過(guò)三步得到的結(jié)果就是大 O 階段。

常數(shù)階

高斯算法:

var sum = 0,n = 100 //執(zhí)行一次

sum = (1 + n) * n / 2 //執(zhí)行一次

print(sum) //執(zhí)行一次

包括打印結(jié)果距境,這個(gè)算法的運(yùn)行次數(shù)函數(shù) f(n) = 3申尼。推導(dǎo)第一步,將常數(shù)3變成1垫桂。沒(méi)有最高階項(xiàng)师幕,所以這個(gè)算法的復(fù)雜度為 O(1)。

增加理解伪货,看下面這段代碼:

var sum = 0,n = 100 //執(zhí)行一次

sum = (1 + n) * n / 2 //執(zhí)行一次
sum = (1 + n) * n / 2 //執(zhí)行一次
sum = (1 + n) * n / 2 //執(zhí)行一次
sum = (1 + n) * n / 2 //執(zhí)行一次
sum = (1 + n) * n / 2 //執(zhí)行一次
sum = (1 + n) * n / 2 //執(zhí)行一次
sum = (1 + n) * n / 2 //執(zhí)行一次

print(sum) //執(zhí)行一次

無(wú)論 n 為多少们衙,這兩段代碼的執(zhí)行結(jié)果相同,區(qū)別只是固定的執(zhí)行次數(shù)(循環(huán)結(jié)構(gòu)除外)碱呼,與 n 無(wú)關(guān)蒙挑,所以復(fù)雜度還是 O(1)。

線性階

for i in 0 ... n{
    //執(zhí)行時(shí)間復(fù)雜度為O(1)的算法
}

循環(huán)體中代碼要執(zhí)行 n 次愚臀,時(shí)間復(fù)雜度 O(n)忆蚀,沒(méi)毛病。

對(duì)數(shù)階

var i = 1
let n = 100
while i < n {
    i *= 2
    //以下執(zhí)行復(fù)雜度為 O(1) 的算法步驟
}

i 每次都在加倍接近 n,2^x = n 得 x = log2n馋袜,將最高項(xiàng)的常數(shù)項(xiàng)變成1男旗,復(fù)雜度為 O(logn)。

平方階

var n = 100
for i in 0...n{
    for j in 0...n {
        //執(zhí)行時(shí)間復(fù)雜度為 O(1)的算法
    }
}

這段是最簡(jiǎn)單的復(fù)雜度為 O(n2)代碼欣鳖,在計(jì)算多重循環(huán)的算法的復(fù)雜度的時(shí)候其實(shí)就是高中數(shù)列的一些相關(guān)運(yùn)算察皇,關(guān)注算法怎么越來(lái)越接近算法結(jié)束之后的執(zhí)行次數(shù)。
如:

var n = 100
for i in 0...n{
    for j in i...n {
        //執(zhí)行時(shí)間復(fù)雜度為 O(1)的算法
    }
}

這個(gè)算法的執(zhí)行次數(shù)為 n2/2 + n/2,看起來(lái)很長(zhǎng)泽台,其實(shí)經(jīng)過(guò)計(jì)算法則處理之后這段代碼的復(fù)雜度為 O(n2)什荣。

end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市怀酷,隨后出現(xiàn)的幾起案子稻爬,更是在濱河造成了極大的恐慌,老刑警劉巖蜕依,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桅锄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡样眠,警方通過(guò)查閱死者的電腦和手機(jī)友瘤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吹缔,“玉大人商佑,你說(shuō)我怎么就攤上這事∠崽粒” “怎么了茶没?”我有些...
    開(kāi)封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)晚碾。 經(jīng)常有香客問(wèn)我抓半,道長(zhǎng),這世上最難降的妖魔是什么格嘁? 我笑而不...
    開(kāi)封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任笛求,我火速辦了婚禮,結(jié)果婚禮上糕簿,老公的妹妹穿的比我還像新娘探入。我一直安慰自己,他們只是感情好懂诗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布蜂嗽。 她就那樣靜靜地躺著,像睡著了一般殃恒。 火紅的嫁衣襯著肌膚如雪植旧。 梳的紋絲不亂的頭發(fā)上辱揭,一...
    開(kāi)封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音病附,去河邊找鬼问窃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛完沪,可吹牛的內(nèi)容都是我干的域庇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼丽焊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼较剃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起技健,我...
    開(kāi)封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惰拱,沒(méi)想到半個(gè)月后雌贱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偿短,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年欣孤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昔逗。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡降传,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勾怒,到底是詐尸還是另有隱情婆排,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布笔链,位于F島的核電站段只,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鉴扫。R本人自食惡果不足惜赞枕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坪创。 院中可真熱鬧炕婶,春花似錦、人聲如沸莱预。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锁施。三九已至陪踩,卻和暖如春杖们,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肩狂。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工摘完, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人傻谁。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓孝治,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親审磁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谈飒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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