1.數據結構和算法列舉
首先算法是依賴于數據結構的,合適的數據結構導致算法的性能會有很大出入。下面列出了一些數據結構(Data Structure)(左邊)和算法(Algorithm)(右邊)。
數據結構和算法列舉
2.性能
說到性能,就要說到時間復雜度和空間復雜度。一道面試題或者業務場景,一般來說實現的話可以有多個數據結構和算法選擇,但是接下來的面試官說不定也會問道你選擇某種數據結構和算法的原因(為了系統節省時間空間不也是需要抉擇嗎?)
所以這倆個復雜度也是需要了解的。時間復雜度就是程序要耗時多久,空間復雜度一般是指 程序里面發的數據需要占多少空間。
Big O notation(可以百度,不在這里展開)
(一般數據可以根據輸入確定,所以一般大家看偽代碼都是講的時間復雜度,而空間復雜度可以類推?)
? O(1),常數復雜度。
? ?tips:?O(1)?O(2)?O(100)?O(1000)? 都是常數復雜度
常數復雜度
for循環:第一個一個for循環,第二個為嵌套for循壞。(這里的N你并不知道實際入參是多少,所以概數化為N)
for循環的復雜度
其他復雜度
其他復雜度
算法優化舉例:
如下圖所示,直接累加的時間復雜度是O(n)。
經過總結規律,算出求和公式,只要一次計算即可以算出結果,所以復雜度為O(1)。這個總結規律的過程就可以稱為選取算法,也就是算法的優化。
算法優化
現實中以及面試中不會是這么簡單的,復雜的有遞歸算法,下面舉例其中較為常見的一種。
經典遞歸算法:斐波拉契(這里不展開學習,后續會有)
斐波拉契總結公式
斐波拉契實際運算
那么它的時間復雜度是多少呢?是2的n次方。
先記下來,后續詳細講解。所以有的時候,看起來很簡單的算法公式,但是在實際計算機計算的時候,復雜度并不是很簡單。
所以算法的學習任重而道遠。本篇暫時結束。