數(shù)據(jù)結(jié)構(gòu)(時(shí)間復(fù)雜度)

什么是時(shí)間復(fù)雜度腻要,算法中某個(gè)函數(shù)有n次基本操作重復(fù)執(zhí)行,用T(n)表示,現(xiàn)在有某個(gè)輔助函數(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ù)雜度。通俗一點(diǎn)講憔维,其實(shí)所謂的時(shí)間復(fù)雜度涛救,就是找了一個(gè)同樣曲線類型的函數(shù)f(n)來(lái)表示這個(gè)算法的在n不斷變大時(shí)的趨勢(shì) 。當(dāng)輸入量n逐漸加大時(shí)业扒,時(shí)間復(fù)雜性的極限情形稱為算法的“漸近時(shí)間復(fù)雜性”检吆。

計(jì)算時(shí)間復(fù)雜度的方法:

  1. 用常數(shù)1代替運(yùn)行時(shí)間中的所有加法常數(shù)
  2. 修改后的運(yùn)行次數(shù)函數(shù)中,只保留最高階項(xiàng)
  3. 去除最高階項(xiàng)的系數(shù)

按數(shù)量級(jí)遞增排列程储,常見(jiàn)的時(shí)間復(fù)雜度有:

隨著問(wèn)題規(guī)模n的不斷增大蹭沛,上述時(shí)間復(fù)雜度不斷增大,算法的執(zhí)行效率越低章鲤。

1. 常數(shù)階

這種與問(wèn)題規(guī)模的大小無(wú)關(guān)(n的多少)摊灭,執(zhí)行時(shí)間恒定的算法,我們稱之為具有O(1)的時(shí)間復(fù)雜度败徊,又叫常數(shù)階帚呼。

int sum = 0, n = 100;       /*執(zhí)行一次*/
sum = (1 + n) * n / 2;      /*執(zhí)行一次*/
printf("%d",sum);           /*執(zhí)行一次*/

2. 線性階

線性階的循環(huán)結(jié)構(gòu)會(huì)復(fù)雜很多。要確定某個(gè)算法的階次皱蹦,我們常常需要確定某個(gè)特定語(yǔ)句或某個(gè)語(yǔ)句集運(yùn)行的次數(shù)萝挤。因此御毅,我們要分析算法的復(fù)雜度,關(guān)鍵就是要分析循環(huán)結(jié)構(gòu)的運(yùn)行情況怜珍。

下面這段代碼端蛆,它的循環(huán)的時(shí)間復(fù)雜度為O(n), 因?yàn)檠h(huán)體中的代碼須要執(zhí)行n次酥泛。

int i;      
for(i = 0; i < n; i++){
    /*時(shí)間復(fù)雜度為O(1)的程序步驟序列*/
}

3. 對(duì)數(shù)階

int count = 1;      
while (count < n){
   count = count * 2;
  /*時(shí)間復(fù)雜度為O(1)的程序步驟序列*/
}
由于每次count乘以2之后今豆,就距離n更近了一分。 也就是說(shuō)柔袁,有多少個(gè)2相乘后大于n呆躲,則會(huì)退出循環(huán)。 由2^x=n 得到x=log2(n)捶索。 所以這個(gè)循環(huán)的時(shí)間復(fù)雜度為O(log2(n))插掂。

4. 平方階

這段代碼的時(shí)間復(fù)雜度為O(n^2)。

int i, j;      
for(i = 0; i < n; i++){
    for(j = 0; j < n; j++){
        /*時(shí)間復(fù)雜度為O(1)的程序步驟序列*/
    }

循環(huán)的時(shí)間復(fù)雜度等于循環(huán)體的復(fù)雜度乘以該循環(huán)運(yùn)行的次數(shù)腥例。


int i, j;      
for(i = 0; i < n; i++){
    for(j = i; j < n; j++){   /*注意j = i而不是0*/
        /*時(shí)間復(fù)雜度為O(1)的程序步驟序列*/
    }
}

由于當(dāng)i=0時(shí)辅甥,內(nèi)循環(huán)執(zhí)行了n次,當(dāng)i = 1時(shí)燎竖,執(zhí)行了n-1次璃弄,……當(dāng)i=n-1時(shí),執(zhí)行了1次构回。所以總的執(zhí)行次數(shù)為:


根據(jù)時(shí)間復(fù)雜度的算法夏块,第一條,沒(méi)有加法常數(shù)不予考慮纤掸;第二條脐供,只保留最高階項(xiàng),因此保留時(shí)(n^2)/2; 第三條借跪,去除這個(gè)項(xiàng)相乘的常數(shù)患民,也就是去除1/2,最終這段代碼的時(shí)間復(fù)雜度為O(n^2)垦梆。

5. 立方階
int i, j;      
for(i = 1; i < n; i++)
    for(j = 1; j < n; j++)
        for(j = 1; j < n; j++){
            /*時(shí)間復(fù)雜度為O(1)的程序步驟序列*/
 
}

最壞時(shí)間復(fù)雜度和平均時(shí)間復(fù)雜度

  1. 最壞情況下的時(shí)間復(fù)雜度稱最壞時(shí)間復(fù)雜度匹颤。一般不特別說(shuō)明,討論的時(shí)間復(fù)雜度均是最壞情況下的時(shí)間復(fù)雜度托猩。
    這樣做的原因是:最壞情況下的時(shí)間復(fù)雜度是算法在任何輸入實(shí)例上運(yùn)行時(shí)間的上界印蓖,這就保證了算法的運(yùn)行時(shí)間不會(huì)比任何更長(zhǎng)。
  2. 平均時(shí)間復(fù)雜度是指所有可能的輸入實(shí)例均以等概率出現(xiàn)的情況下京腥,算法的期望運(yùn)行時(shí)間赦肃。設(shè)每種情況的出現(xiàn)的概率為pi,平均時(shí)間復(fù)雜度則為sum(pi*f(n))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子他宛,更是在濱河造成了極大的恐慌船侧,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厅各,死亡現(xiàn)場(chǎng)離奇詭異镜撩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)队塘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門袁梗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人憔古,你說(shuō)我怎么就攤上這事遮怜。” “怎么了鸿市?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵锯梁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我焰情,道長(zhǎng)陌凳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任烙样,我火速辦了婚禮冯遂,結(jié)果婚禮上蕊肥,老公的妹妹穿的比我還像新娘谒获。我一直安慰自己,他們只是感情好壁却,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布批狱。 她就那樣靜靜地躺著,像睡著了一般展东。 火紅的嫁衣襯著肌膚如雪赔硫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天盐肃,我揣著相機(jī)與錄音爪膊,去河邊找鬼。 笑死砸王,一個(gè)胖子當(dāng)著我的面吹牛推盛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谦铃,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼耘成,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瘪菌,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤撒会,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后师妙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诵肛,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年疆栏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了曾掂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡珠洗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出许蓖,到底是詐尸還是另有隱情,我是刑警寧澤膊爪,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站嚎莉,受9級(jí)特大地震影響米酬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜趋箩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叫确。 院中可真熱鬧,春花似錦竹勉、人聲如沸飞盆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吓歇。三九已至,卻和暖如春票腰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丧慈。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工主卫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹃愤,地道東北人簇搅。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓软吐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凹耙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子姿现,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349