c++循环执行一个函数_20川大计算机 | 时间复杂度,你避不开的一个考点
文 彥 考 研
讓丨夢(mèng)想丨有跡可循
這是20屆川大計(jì)算機(jī) 第 3 篇文章
零師姐 2017屆以初試353分,復(fù)試第2的成績考入四川大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)。現(xiàn)于文彥考研擔(dān)任專業(yè)課導(dǎo)師,輔導(dǎo)川大874計(jì)算機(jī)綜合考研專業(yè)課。多次參與與IT公司的合作項(xiàng)目中,熟悉計(jì)算機(jī)專業(yè)的考研動(dòng)態(tài)與就業(yè)形勢(shì)。時(shí)間復(fù)雜度專場
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),那么時(shí)間復(fù)雜度就是一個(gè)逃不過的話題。今天我們就來仔細(xì)看看它是什么?怎么計(jì)算時(shí)間復(fù)雜度?它怎么考?這三個(gè)問題。
我們把 算法需要執(zhí)行的運(yùn)算次數(shù) 用 輸入大小n 的函數(shù) 表示,即 T(n) 。
此時(shí)為了 估算算法需要的運(yùn)行時(shí)間 和 簡化算法分析,我們引入時(shí)間復(fù)雜度的概念。
定義:存在常數(shù) c 和函數(shù) f(N),使得當(dāng) N >= c 時(shí) T(N) <= f(N),表示為 T(n) = O(f(n)) 。
如圖:
算法的時(shí)間復(fù)雜度,用來度量算法的運(yùn)行時(shí)間,記作: T(n) = O(f(n))。它表示隨著 輸入大小n 的增大,算法執(zhí)行需要的時(shí)間的增長速度可以用 f(n) 來描述。
顯然如果 T(n) = n^2,那么 T(n) = O(n^2),T(n) = O(n^3),T(n) = O(n^4) 都是成立的,但是因?yàn)榈谝粋€(gè) f(n) 的增長速度與 T(n) 是最接近的,所以第一個(gè)是最好的選擇,所以我們說這個(gè)算法的復(fù)雜度是 O(n^2) 。
那么當(dāng)我們拿到算法的執(zhí)行次數(shù)函數(shù) T(n) 之后怎么得到算法的時(shí)間復(fù)雜度呢?
1、我們知道常數(shù)項(xiàng)對(duì)函數(shù)的增長速度影響并不大,所以當(dāng) T(n) = c,c 為一個(gè)常數(shù)的時(shí)候,我們說這個(gè)算法的時(shí)間復(fù)雜度為 O(1);如果 T(n) 不等于一個(gè)常數(shù)項(xiàng)時(shí),直接將常數(shù)項(xiàng)省略。
2、我們知道高次項(xiàng)對(duì)于函數(shù)的增長速度的影響是最大的。n^3 的增長速度是遠(yuǎn)超 n^2 的,同時(shí) n^2 的增長速度是遠(yuǎn)超 n 的。 同時(shí)因?yàn)橐蟮木炔桓?#xff0c;所以我們直接忽略低此項(xiàng)。
3、因?yàn)楹瘮?shù)的階數(shù)對(duì)函數(shù)的增長速度的影響是最顯著的,所以我們忽略與最高階相乘的常數(shù)。
綜合起來:如果一個(gè)算法的執(zhí)行次數(shù)是 T(n),那么只保留最高次項(xiàng),同時(shí)忽略最高項(xiàng)的系數(shù)后得到函數(shù) f(n),此時(shí)算法的時(shí)間復(fù)雜度就是 O(f(n))。為了方便描述,下文稱此為 大O推導(dǎo)法。
由此可見,由執(zhí)行次數(shù) T(n) 得到時(shí)間復(fù)雜度并不困難,很多時(shí)候困難的是從算法通過分析和數(shù)學(xué)運(yùn)算得到 T(n)。對(duì)此,提供下列四個(gè)便利的法則,這些法則都是可以簡單推導(dǎo)出來的,總結(jié)出來以便提高效率。
1、對(duì)于一個(gè)循環(huán),假設(shè)循環(huán)體的時(shí)間復(fù)雜度為 O(n),循環(huán)次數(shù)為 m,則這個(gè)
循環(huán)的時(shí)間復(fù)雜度為 O(n×m)。
2、對(duì)于多個(gè)循環(huán),假設(shè)循環(huán)體的時(shí)間復(fù)雜度為 O(n),各個(gè)循環(huán)的循環(huán)次數(shù)分別是a, b, c...,則這個(gè)循環(huán)的時(shí)間復(fù)雜度為 O(n×a×b×c...)。分析的時(shí)候應(yīng)該由里向外分析這些循環(huán)。
3、對(duì)于順序執(zhí)行的語句或者算法,總的時(shí)間復(fù)雜度等于其中最大的時(shí)間復(fù)雜度。
4、對(duì)于條件判斷語句,總的時(shí)間復(fù)雜度等于其中 時(shí)間復(fù)雜度最大的路徑 的時(shí)間復(fù)雜度。
時(shí)間復(fù)雜度分析的基本策略是:從內(nèi)向外分析,從最深層開始分析。如果遇到函數(shù)調(diào)用,要深入函數(shù)進(jìn)行分析。
時(shí)間復(fù)雜度其實(shí)并不難,通過這次我為你們準(zhǔn)備的這幾道逐步“升級(jí)”的題目,再消化一下上述的知識(shí)點(diǎn),相信你們應(yīng)該已經(jīng)有把握了。至于一些整理得更全面的干貨我也會(huì)全部在我的課上分享給你們的,你們放心吧。就到暑假了,黃金復(fù)習(xí)時(shí)間同學(xué)們一定要好好把握,有疑問的地方不要自己愣著想,可以直接在群里問我,畢竟學(xué)習(xí)的時(shí)間那么寶貴,將疑問都拋給零師姐吧
掃碼入群~
獲取更多干貨~
加小彥微信
一對(duì)一咨詢~
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的c++循环执行一个函数_20川大计算机 | 时间复杂度,你避不开的一个考点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .bin 文件用excel文件打开_bi
- 下一篇: 全局对象_C++全局变量初始化