时间复杂度的理解
『 O(某函數())』用來描述一個算法處理給定的數據大概需要多少次運算。
- 大O符號是一種算法復雜度的相對表示方式。
這句話中有三個重要的用詞,只要理解它們,就能知道它到底是什么意思了:
1、相對(relative):你只能比較相同的事物。你不能把一個做算數乘法的算法和排序整數列表的算法進行比較。
就好比拳擊比賽需要分重量級進行比賽一樣,這樣的比較是沒有意義的。
2、表示(representation):大O(用它最簡單的形式)把算法間的比較簡化為了一個單一變量。這個變量的選擇基
于觀察或假設。例如,處理某一個問題,有三種算法可以解決,它們的時間復雜度分別是O(n),O(logn),O(n2),
這樣就能很快比較出這三種算法的優劣了。而里面的變量是多少,取決于算法是什么樣的模式,它們在運算過程中
做了什么樣的操作。
3、復雜度(complexity):如果排序10,000個元素花費了我1秒,那么排序1百萬個元素會花多少時間?
在這個例子里,復雜度就是相對其他東西的度量結果。
- 算術可以讓我們更好的理解大O:
這里我們可以聯系小學學的豎式運算來理解:
1)當我們進行加法運算時,我們需要對每一位上的數做一遍加法,所以,當我們進行2個4位數的加法時,就需要算4次,
如若進位,就需要多算一次,100位數相加就需要做100次運算,以此類推;減法的模式和加法類似,只是借位替代了進位;
2)我們在做乘法運算時,需要將每1位數字與另一個數字的每1位相乘,再做加法,所以兩個n位數想乘,就要
先做n2次乘法,再做大概2n次加法來得到最終結果。
- 上面的兩個例子都是用來解決兩個數字的運算問題的,但它們的模式不一樣,經歷的過程不一樣,所以復雜度就不一樣,
加法的模式中,位數和運算操作是成正比的,所以它的時間復雜度可以用O(n)表示;
而乘法的模式中,它是以平方的方式進行增長,它的時間復雜度可以用O(n2+2n)表示。
我們只關心復雜度最重要的部分:乘法運算中,我們可以把操作次數表示為:n2?+ 2n。但當n特別大時,第二個 2n 就無關緊要。
所以只需要用O(n2)就能表示乘法運算的時間復雜度
?
轉載于:https://www.cnblogs.com/value-code/p/8506340.html
總結
- 上一篇: HDU 4763 Theme Secti
- 下一篇: c# try-finally有什么用