慕蓋茨4494581
2019-05-24 15:07:27
bigO,你如何計(jì)算/近似它?大多數(shù)擁有CS學(xué)位的人肯定會知道Big O代表什么。它可以幫助我們衡量算法的實(shí)際效率(如何),如果你知道你試圖解決的問題屬于哪個類別,你可以弄清楚是否仍然可以擠出那么少的額外性能。1但我很好奇,你如何計(jì)算或近似算法的復(fù)雜性?
3 回答

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