通常,算法的效率或運(yùn)行時(shí)間被表述為輸入長(zhǎng)度與步驟數(shù)(時(shí)間復(fù)雜度)或存儲(chǔ)位置(空間復(fù)雜度)之間的函數(shù)關(guān)系。算法分析是更廣泛的計(jì)算復(fù)雜性理論的重要組成部分,它為解決給定計(jì)算問(wèn)題的任何算法所需的資源提供理論估算。這些估算為尋找高效算法提供了合理的方向。在算法的理論分析中,通常從漸進(jìn)的意義上估計(jì)算法的復(fù)雜性,即估計(jì)任意大輸入的復(fù)雜性函數(shù)。為此,我們使用了大 O 符號(hào)、大歐米茄符號(hào)和大θ符號(hào)。
經(jīng)驗(yàn)法則可以通過(guò)計(jì)算程序的嵌套循環(huán)來(lái)分析簡(jiǎn)單程序。對(duì) n 個(gè)項(xiàng)目的單個(gè)循環(huán)產(chǎn)生 f( n ) = n。循環(huán)中的循環(huán)產(chǎn)生 f( n ) = n3。
經(jīng)驗(yàn)法則:對(duì)于一系列連續(xù)的 for 循環(huán),其中最慢的循環(huán)決定了程序的漸近行為。兩個(gè)嵌套循環(huán)后接一個(gè)單循環(huán),其漸近行為與單獨(dú)的嵌套循環(huán)相同,因?yàn)榍短籽h(huán)支配著簡(jiǎn)單循環(huán)。
一、分析類(lèi)型
算法復(fù)雜度可以是最佳、平均或最壞情況分析。算法分析可以使用大 O 符號(hào)表示。給定算法的最佳、最差和平均情況分別表示資源使用的最少、最多和平均值。大 O 符號(hào)簡(jiǎn)化了算法的比較。
1.最佳情況
計(jì)算機(jī)科學(xué)中的最佳情況性能,用于描述算法在最佳條件下的行為。最佳情況性能的一個(gè)例子是嘗試使用某種排序算法對(duì)已經(jīng)排序的列表進(jìn)行排序。例如:[1,2,3] --> [1,2,3] 。
2.平均情況
使用解決問(wèn)題的平均最優(yōu)條件來(lái)衡量平均情況性能。例如,一個(gè)既不是最佳條件也不是最差條件的列表,你希望它按一定順序排序。例如 [2,1,5,3] --> [1,2,3,5] 或 [ 2,1,5,3] --> [5,3,2,1] 。
3.最差情況
最壞情況性能用于分析算法在最壞輸入情況下的行為,以及解決問(wèn)題的最小可能性。它決定了算法在給定輸入條件下何時(shí)表現(xiàn)最差。最差情況性能的一個(gè)例子是,一個(gè)已經(jīng)按升序排序的姓名列表,你想按降序排序。例如:[Abby, Bill, Catherine] --> [Catherine, Bill, Abby]。
二、遞歸復(fù)雜性
dionyziz
現(xiàn)在讓我們來(lái)看看遞歸函數(shù)。遞歸函數(shù)是一個(gè)調(diào)用自身的函數(shù)。我們能分析一下它的復(fù)雜性嗎?下面這個(gè)函數(shù)是用 Python 寫(xiě)的,用來(lái)計(jì)算給定數(shù)字的階乘。正整數(shù)的階乘是將它與之前所有的正整數(shù)相乘得到的。例如,5 的階乘是 5 * 4 * 3 * 2 * 1。我們將其表示為 "5!",并將其發(fā)音為 "5 的階乘"。
1.def factorial( n ):
如果 n == 1:
返回 1 4.
4. 返回 n * factorial( n - 1 )
讓我們分析一下這個(gè)函數(shù)的復(fù)雜性。這個(gè)函數(shù)中沒(méi)有任何循環(huán),但它的復(fù)雜度也不是恒定的。要想知道它的復(fù)雜度,我們需要再次計(jì)算指令。很明顯,如果我們給這個(gè)函數(shù)傳遞 n,它就會(huì)執(zhí)行 n 次。如果你對(duì)此不確定,現(xiàn)在就 "手動(dòng) "運(yùn)行 n = 5,以驗(yàn)證它是否真的有效。例如,對(duì)于 n = 5,它會(huì)執(zhí)行 5 次,因?yàn)槊看握{(diào)用都會(huì)將 n 減少 1。因此,我們可以看到這個(gè)函數(shù)是 Θ( n )。
如果你對(duì)這一事實(shí)不確定,請(qǐng)記住,你總是可以通過(guò)計(jì)算指令來(lái)找到精確的復(fù)雜度。如果你愿意,現(xiàn)在可以嘗試計(jì)算這個(gè)函數(shù)執(zhí)行的實(shí)際指令,找到一個(gè)函數(shù) f( n ),看看它確實(shí)是線性的(記住,線性意味著 Θ( n ))。
如果你對(duì)此還有疑問(wèn),或者有更多關(guān)于學(xué)業(yè)輔導(dǎo)方面需求的話(huà),可以添加微信號(hào):hmkt131聯(lián)系海馬課堂的Joye老師哦。