一個程序是怎樣組成的呢?數據結構+算法=程序算法
1、什麼是數據結構:數組
簡單定義就是研究數據的存儲方式;選擇適當的數據結構能夠提升計算機程序的運行效率(時間複雜度O)和存儲效率(空間複雜度S)。數據結構
2、數據結構的分類spa
數據結構分類大體能夠按照邏輯結構(抽象)跟物理結構(存儲結構)blog
3、時間複雜度與空間複雜度資源
1.時間複雜度:io
①概念:執行算法須要消耗的時間長短,越快越好。好比你在電腦上打開計算器,若是一個普通的運算要消耗1分鐘時間,那誰還會用它呢,還不如本身口算呢。class
②常見時間複雜度 效率
A.變量
線性階O(n)
分析:第1行會執行1次,第2行和第3行會分別執行n次,總的執行時間也就是 2n + 1 次,那它的時間複雜度表示是 O(2n + 1) 嗎?不是的,仍是那句話:「大O符號表示法並非用於來真實表明算法的執行時間的,它是用來表示代碼執行時間的增加變化趨勢的」。因此它的時間複雜度實際上是O(n);
C
對數階O(logN)
分析:能夠看到每次循環的時候 i 都會乘2(2^i=n),那麼總共循環的次數就是log2n,所以這個代碼的時間複雜度簡寫爲O(logn)
D.線性對數階O(nlogN)
分析:同上面描述,在while裏面的時間複雜度爲O(logn),for裏面的時間複雜度爲O(n),因此就有O(nO(logn)),簡寫爲O(nlogn)
平方階O(n²)
分析:一樣的,在for裏面的時間複雜度爲O(n),因此就有O(nO(n)),簡寫爲 O(n²)。立方階O(n³)、K次方階O(n^k)參考上面的O(n²) 去理解就行了,O(n³)至關於三層n循環,其它的相似
F.算法時間複雜度的比較(從小到大):
2.空間複雜度:
①概念:執行當前算法須要消耗的存儲空間大小,也是越少越好。原本計算機的存儲資源就是有限的,若是你的算法老是須要耗費很大的存儲空間,這樣也會給機器帶來很大的負擔。
②常見空間複雜度
A.空間複雜度 O(1)
分析:若是算法執行所須要的臨時空間不隨着某個變量n的大小而變化,即此算法空間複雜度爲一個常量,可表示爲 O(1),代碼中的 i、j、m 所分配的空間都不隨着處理數據量變化,所以它的空間複雜度 S(n) = O(1)。
B.空間複雜度 O(n)
分析:這段代碼中,第一行new了一個數組出來,這個數據佔用的大小爲n,後面雖然有循環,但沒有再分配新的空間,所以,這段代碼的空間複雜度主要看第一行便可,即 S(n) = O(n)。