3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
小提示:big O
符號(hào)用于表示漸近復(fù)雜度(即,當(dāng)問題的大小增長(zhǎng)到無窮大時(shí)),并且它隱藏了一個(gè)常量。
這意味著在O(n)中的算法和O(n 2)中的算法之間,最快的并不總是第一個(gè)(盡管總是存在n的值,使得對(duì)于大小> n的問題,第一個(gè)算法是最快的)。
請(qǐng)注意,隱藏常量很大程度上取決于實(shí)現(xiàn)!
此外,在某些情況下,運(yùn)行時(shí)不是輸入大小 n的確定性函數(shù)。例如,使用快速排序進(jìn)行排序:對(duì)n個(gè)元素的數(shù)組進(jìn)行排序所需的時(shí)間不是常量,而是取決于數(shù)組的起始配置。
有不同的時(shí)間復(fù)雜性:
最壞的情況(通常最簡(jiǎn)單的解決,但并不總是非常有意義)
平均情況(通常更難以弄清楚...)
...
一個(gè)很好的介紹是R. Sedgewick和P. Flajolet 的算法分析導(dǎo)論。
正如您所說,premature optimisation is the root of all evil
并且(如果可能的話)在優(yōu)化代碼時(shí)應(yīng)始終使用分析。它甚至可以幫助您確定算法的復(fù)雜性。
添加回答
舉報(bào)