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

時(shí)間復(fù)雜度的意義

時(shí)間復(fù)雜度是對(duì)算法好壞衡量的一個(gè)標(biāo)準(zhǔn)。試想同樣一個(gè)功能a算法實(shí)現(xiàn)只要1000ms內(nèi)存只有5MB,而b算法需要2000ms甚至更多,內(nèi)存需要50MB甚至跟多
衡量代碼的好壞包括兩個(gè)非常重要的指標(biāo):

  1. 運(yùn)行時(shí)間
  2. 占用空間

由于代碼的運(yùn)行環(huán)境和規(guī)模影響,絕對(duì)時(shí)間是無(wú)法猜測(cè)出來(lái)的但是可以根據(jù)代碼的執(zhí)行次數(shù)來(lái)預(yù)顧出時(shí)間

基本操作執(zhí)行次數(shù)

: 例如有10斤大米,每2天吃1斤吁峻,那么吃掉10斤大米需要幾天
答案是 2x10 = 20天
如果大米的重量是N斤那么吃掉所有的大米就需要 2 x n = 2n 天
所以相對(duì)時(shí)間就是 T(n) = 2n

: 例如有20斤大米,每3天吃掉剩余大米的一半第一天吃10斤,第二天吃5斤用含,第三天吃2.5斤橙困,那么需要多少天
答案是 3 x log20 = 3 x 4 + 1天 = 13天
如果大米的重量是N斤那么需要 3 x logn
相對(duì)時(shí)間就是 T(n) = 3logn

:例如有5斤大米和一個(gè)雞腿,2天吃掉一個(gè)雞腿那么吃掉整個(gè)雞腿所需時(shí)間耕餐?
答案是:2天 因?yàn)橹皇钦f(shuō)雞腿跟大米沒(méi)有關(guān)系
如果大米重量是n凡傅,無(wú)論大米多重吃雞腿的實(shí)際仍然是2天
T(n) = 2

:例如有10斤大米,吃掉第一個(gè)1斤需要1天肠缔,第二個(gè)1斤需要兩天 第三個(gè)1斤需要三天... 那么吃掉所有大米時(shí)間是多少呢夏跷?
答案是: (1+2+3+4...+7+8+9+10) = 55
如果大米重量是N那么時(shí)間為 (1+2+3...+n-2+n-1+n) = (1 + n) * (n*0.5) = 0.5 * n^2 + 0.5 * n
T(n) = 0.5^2 + 0.5n

這一思想同樣適用于對(duì)程序基本操作執(zhí)行次數(shù)的統(tǒng)計(jì)

: T(n) = 2n

void eat1(int n){
    for(int i=0; i<n; i++){;
        System.out.println("等待一天");
        System.out.println("等待一天");
        System.out.println("吃一斤米");
    }

: T(n) = 3logn

///以2為底 n的冪
void eat2(int n){
   for(int i=1; i<n; i*=2){
       System.out.println("等待一天");
       System.out.println("等待一天");
       System.out.println("吃一半米");
   }
}

:T(n) = 2

void eat3(int n){
   System.out.println("等待一天");
   System.out.println("吃一個(gè)雞腿");
}

:T(n) = 0.5n^2 + 0.5n


void eat4(int n){
   for(int i=0; i<n; i++){
       for(int j=0; j<i; j++){
           System.out.println("等待一天");
       }
       System.out.println("吃一斤米");
   }
}

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

有了基本操作執(zhí)行次數(shù)的函數(shù) T(n),是否就可以分析和比較一段代碼的運(yùn)行時(shí)間了呢明未?還是有一定的困難槽华。
比如算法A的相對(duì)時(shí)間是T(n)= 100n,算法B的相對(duì)時(shí)間是T(n)= 5n^2趟妥,這兩個(gè)到底誰(shuí)的運(yùn)行時(shí)間更長(zhǎng)一些猫态?這就要看n的取值了。
所以披摄,這時(shí)候有了漸進(jìn)時(shí)間復(fù)雜度(asymptotic time complectiy)的概念亲雪,官方的定義如下:
若存在函數(shù) f(n),使得當(dāng)n趨近于無(wú)窮大時(shí)疚膊,T(n)/ f(n)的極限值為不等于零的常數(shù)义辕,則稱 f(n)是T(n)的同數(shù)量級(jí)函數(shù)。
記作 T(n)= O(f(n))寓盗,稱O(f(n)) 為算法的漸進(jìn)時(shí)間復(fù)雜度灌砖,簡(jiǎn)稱時(shí)間復(fù)雜度。
漸進(jìn)時(shí)間復(fù)雜度用大寫O來(lái)表示傀蚌,所以也被稱為大O表示法基显。

推導(dǎo)時(shí)間復(fù)雜度

如果運(yùn)行時(shí)間是常數(shù)量級(jí),用常數(shù)1表示善炫;
只保留時(shí)間函數(shù)中的最高階項(xiàng)撩幽;
如果最高階項(xiàng)存在,則省去最高階項(xiàng)前面的系數(shù)销部。

:T(n) = 2n
最高項(xiàng)為2n 則省出系數(shù)3 轉(zhuǎn)化為時(shí)間復(fù)雜度為 T(n) = O(n)

:T(n) = 3logn
最高項(xiàng)為3logn 則省出系數(shù)3 轉(zhuǎn)化為時(shí)間復(fù)雜度為 T(n) = O(logn)

:T(n) = 2
最高項(xiàng)為2 則省出系數(shù)2 轉(zhuǎn)化為時(shí)間復(fù)雜度為 T(n) = O(1)

:T(n) = 0.5n^2 + 0.5n
最高階項(xiàng)為0.5n^2摸航,省去系數(shù)0.5制跟,轉(zhuǎn)化的時(shí)間復(fù)雜度為T(n) = O(n^2)

這四種復(fù)雜度時(shí)間耗時(shí)為
O(1) < O(logn) < O(n) < O(n^2)
除了上述的四個(gè)場(chǎng)景舅桩,還有許多不同形式的時(shí)間復(fù)雜度,比如:
O(nlogn), O(n^3), O(m*n)雨膨,O(2^n)擂涛,O(n!)

時(shí)間復(fù)雜度的巨大差異

例子
算法A的相對(duì)時(shí)間規(guī)模是T(n)= 100n,時(shí)間復(fù)雜度是O(n)
算法B的相對(duì)時(shí)間規(guī)模是T(n)= 5n2撒妈,時(shí)間復(fù)雜度是O(n2)

兩種時(shí)間規(guī)模的差異.png

從表格中可以看出恢暖,當(dāng)n的值很小的時(shí)候,算法A的運(yùn)行用時(shí)要遠(yuǎn)大于算法B狰右;當(dāng)n的值達(dá)到1000左右杰捂,算法A和算法B的運(yùn)行時(shí)間已經(jīng)接近;當(dāng)n的值越來(lái)越大棋蚌,達(dá)到十萬(wàn)嫁佳、百萬(wàn)時(shí),算法A的優(yōu)勢(shì)開始顯現(xiàn)谷暮,算法B則越來(lái)越慢蒿往,差距越來(lái)越明顯。
這就是不同時(shí)間復(fù)雜度帶來(lái)的差距湿弦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓤漏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颊埃,更是在濱河造成了極大的恐慌蔬充,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件班利,死亡現(xiàn)場(chǎng)離奇詭異娃惯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)肥败,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門趾浅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人馒稍,你說(shuō)我怎么就攤上這事皿哨。” “怎么了纽谒?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵证膨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鼓黔,道長(zhǎng)央勒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任澳化,我火速辦了婚禮崔步,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缎谷。我一直安慰自己井濒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瑞你,像睡著了一般酪惭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上者甲,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天春感,我揣著相機(jī)與錄音,去河邊找鬼虏缸。 笑死甥厦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寇钉。 我是一名探鬼主播刀疙,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扫倡!你這毒婦竟也來(lái)了谦秧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤撵溃,失蹤者是張志新(化名)和其女友劉穎疚鲤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缘挑,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡集歇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了语淘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诲宇。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖惶翻,靈堂內(nèi)的尸體忽然破棺而出姑蓝,到底是詐尸還是另有隱情,我是刑警寧澤吕粗,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布纺荧,位于F島的核電站,受9級(jí)特大地震影響颅筋,放射性物質(zhì)發(fā)生泄漏宙暇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一议泵、第九天 我趴在偏房一處隱蔽的房頂上張望占贫。 院中可真熱鬧,春花似錦肢簿、人聲如沸靶剑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桩引。三九已至,卻和暖如春收夸,著一層夾襖步出監(jiān)牢的瞬間坑匠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工卧惜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厘灼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓咽瓷,卻偏偏與公主長(zhǎng)得像设凹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茅姜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345