什么是時(shí)間復(fù)雜度

轉(zhuǎn)載自:https://www.cnblogs.com/huangbw/p/7398418.html

什么是時(shí)間復(fù)雜度

作為一個(gè)處在學(xué)習(xí)之路的渣渣,被一個(gè)時(shí)間復(fù)雜度的題給難倒了,然后我就思考了一下什么是時(shí)間復(fù)雜度。雖然在學(xué)校學(xué)習(xí)了了算法的課程,但是仔細(xì)一想,對(duì)于時(shí)間復(fù)雜度還真是不怎么懂。于是重新學(xué)習(xí),記下自己的一些理解。

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

提到時(shí)間復(fù)雜度,第一時(shí)間想到的是算法,簡(jiǎn)單說(shuō),算法就是你解決問(wèn)題的方法,而你用這個(gè)方法解決這個(gè)問(wèn)題所執(zhí)行的語(yǔ)句次數(shù),稱為語(yǔ)句頻度或者時(shí)間頻度,記為T(n)。

那么問(wèn)題來(lái)了,我們?yōu)槭裁匆脒@些個(gè)概念呢。因?yàn)槲覀兿胍氖菆?zhí)行一個(gè)算法耗費(fèi)的時(shí)間,這個(gè)時(shí)間理論上可以得到,但是,要得到這個(gè)時(shí)間就必須要上機(jī)測(cè)試,但是有這個(gè)必要嗎?我們需要知道的是哪一個(gè)算法需要的時(shí)間多,哪一個(gè)算法需要的時(shí)間少,這樣就可以了。而且,算法的耗時(shí)和語(yǔ)句的執(zhí)行次數(shù)是成正比的,即語(yǔ)句執(zhí)行越多,耗時(shí)越多。這也就是我們引入概念的原因。

在上面提到的時(shí)間頻度T(n)中,n是指算法的規(guī)模,n不斷的變化,T(n)就會(huì)不斷的變化,而這些變化的規(guī)律是怎樣的呢?于是我們引入了時(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ù)雜性”。

我們用大O表示法表示時(shí)間復(fù)雜性,它是一個(gè)算法的時(shí)間復(fù)雜性。大O表示只是說(shuō)有上界但并不是上確界。

“大O記法”:在這種描述中使用的基本參數(shù)是 n,即問(wèn)題實(shí)例的規(guī)模,把復(fù)雜性或運(yùn)行時(shí)間表達(dá)為n的函數(shù)。這里的“O”表示量級(jí) (order),比如說(shuō)“二分檢索是 O(logn)的”,也就是說(shuō)它需要“通過(guò)logn量級(jí)的步驟去檢索一個(gè)規(guī)模為n的數(shù)組”記法 O ( f(n) )表示當(dāng) n增大時(shí),運(yùn)行時(shí)間至多將以正比于 f(n)的速度增長(zhǎng)。

時(shí)間復(fù)雜度對(duì)于算法進(jìn)行的分析和大致的比較非常有用,但是真正的情況可能會(huì)因?yàn)橐恍┢渌蛩卦斐刹町悺1热缫粋€(gè)低附加代價(jià)的O(n2)算法在n較小的情況下可能比一個(gè)高附加代價(jià)的 O(nlogn)算法運(yùn)行得更快。但是,n越來(lái)越大以后,相比較而言較慢上升函數(shù)的算法會(huì)運(yùn)行的更快。

上面我引用了一些專業(yè)的定義,可能并不是太好理解,下面會(huì)寫一些常出現(xiàn)的算法時(shí)間復(fù)雜度和一些實(shí)例來(lái)解釋一下。

2.簡(jiǎn)單算法的時(shí)間復(fù)雜度舉例

列舉一些簡(jiǎn)單例子的時(shí)間復(fù)雜度。

O(1)的算法是一些運(yùn)算次數(shù)為常數(shù)的算法。例如:

temp=a;a=b;b=temp;

上面語(yǔ)句共三條操作,單條操作的頻度為1,即使他有成千上萬(wàn)條操作,也只是個(gè)較大常數(shù),這一類的時(shí)間復(fù)雜度為O(1)。

O(n)的算法是一些線性算法。例如:

sum=0;                 

 for(i=0;i<n;i++)       

     sum++;

上面代碼中第一行頻度1,第二行頻度為n,第三行頻度為n,所以f(n)=n+n+1=2n+1。所以時(shí)間復(fù)雜度O(n)。這一類算法中操作次數(shù)和n正比線性增長(zhǎng)。

O(logn) 一個(gè)算法如果能在每個(gè)步驟去掉一半數(shù)據(jù)元素,如二分檢索,通常它就取 O(logn)時(shí)間。舉個(gè)栗子:

int i=1; 

while (i<=n) 

   i=i*2; 

上面代碼設(shè)第三行的頻度是f(n), 則:2的f(n)次方<=n;f(n)<=log?n,取最大值f(n)= log?n,所以T(n)=O(log?n ) 。

O(n2)(n的k次方的情況)最常見的就是平時(shí)的對(duì)數(shù)組進(jìn)行排序的各種簡(jiǎn)單算法都是O(n2),例如直接插入排序的算法。

而像矩陣相乘算法運(yùn)算則是O(n3)。

舉個(gè)簡(jiǎn)單栗子:

sum=0;                

 for(i=0;i<n;i++)  

    for(j=0;j<n;j++) 

       sum++;

第一行頻度1,第二行n,第三行n2,第四行n2,T(n)=2n2+n+1 =O(n2)

O(2的n次方) 比如求具有n個(gè)元素集合的所有子集的算法

O(n!) 比如求具有N個(gè)元素的全排列的算法

時(shí)間復(fù)雜度按n越大算法越復(fù)雜來(lái)排的話:常數(shù)階O(1)、對(duì)數(shù)階O(logn)、線性階O(n)、線性對(duì)數(shù)階O(nlogn)、平方階O(n2)、立方階O(n3)、……k次方階O(n的k次方)、指數(shù)階O(2的n次方)。

既然說(shuō)到了這個(gè)復(fù)雜排序,就必須再多說(shuō)幾句。我們還需要區(qū)分算法最壞情況的行為和期望行為。就比如說(shuō)快速排序,最壞情況運(yùn)行時(shí)間是 O(n2),但期望時(shí)間是O(nlogn)。但是我們只要通過(guò)一些手段,可以避免最壞情況發(fā)生,所以在實(shí)際情況中,精心設(shè)計(jì)的快速排序都能以期望時(shí)間運(yùn)行。

最后再提一下指數(shù)的情況。指數(shù)算法一般來(lái)說(shuō)太復(fù)雜了,所以實(shí)際情況下如果不是迫不得已不要用時(shí)間復(fù)雜度為指數(shù)的算法,除非n特別小。

啰啰嗦嗦寫了很多最基礎(chǔ)的東西,也是想加深一下印象,如果有錯(cuò)誤還請(qǐng)指出。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,273評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,527評(píng)論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,010評(píng)論 1 322
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,250評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,769評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,656評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,853評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,103評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評(píng)論 1 281
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,487評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,815評(píng)論 2 372

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

  • 算法復(fù)雜度 時(shí)間復(fù)雜度 空間復(fù)雜度 什么是時(shí)間復(fù)雜度 算法執(zhí)行時(shí)間需通過(guò)依據(jù)該算法編制的程序在計(jì)算機(jī)上運(yùn)行時(shí)所消耗...
    KODIE閱讀 3,277評(píng)論 0 9
  • 算法的時(shí)間復(fù)雜度和空間復(fù)雜度-總結(jié)通常,對(duì)于一個(gè)給定的算法,我們要做 兩項(xiàng)分析。第一是從數(shù)學(xué)上證明算法的正確性,這...
    Explorer_Mi閱讀 1,453評(píng)論 0 1
  • 通常,對(duì)于一個(gè)給定的算法,我們要做 兩項(xiàng)分析。第一是從數(shù)學(xué)上證明算法的正確性,這一步主要用到形式化證明的方法及相關(guān)...
    西域小碼閱讀 1,882評(píng)論 0 11
  • 今天這個(gè)文章的標(biāo)題有些隨意了,但是我就是想用這個(gè)隨意的標(biāo)題。人啊!人啊!人的一生真的很不容易,從出生到死亡,不知道...
    煙花雨蕁閱讀 154評(píng)論 0 0
  • 自由職業(yè)者,是多少人夢(mèng)寐以求的職業(yè),可以不用朝九晚五,可以不用看人臉色,工作不是為了別人而是為了自己,生活和工作同...
    何知遠(yuǎn)閱讀 196評(píng)論 0 0