數據結構概述
線性結構: 這是最常用的數據結構,特點是數據元素之間是一對一的線性關係。體現爲數組、隊列(先進先出)、鏈表(單、雙、環形)、棧(先進後出)等。
單鏈表 指向後一個節點、雙鏈表指向前後兩個節點;
線性結構有兩種不同的存儲結構:順序存儲結構、鏈式存儲結構
順序存儲 連續的存儲空間、 查找快,刪除插入慢
鏈式存儲 不一定連續、刪除插入塊、查找慢
總結:數據量小的時候首選順序存儲結構,比如ArrayList,數據量大且插入、刪除頻繁時選用鏈式存儲結構,比如LinkedList。
非線性結構: 數據元素之間不是一對一的線性關係。體現爲二維數組、多維數組廣義表、樹結構、圖結構等。
算法基礎知識
算法:解決問題的方法和步驟
評價算法的好壞:漸近時間複雜度和漸近空間複雜度。
時間複雜度
時間頻度---T(n)---基本語句執行的重複次數
時間複雜度--忽略常數項、忽略低次項、忽略係數
忽略常數項: n +20 忽略20 、
忽略低次項 :n*n + 2n 忽略2n
忽略係數 : 3n*n 和5 n*n 3和5忽略;
執行曲線分離 n*n*n 和6*n*n
算法的漸進時間複雜度 O(n) O(n*n)
漸近時間複雜度的大O標記:
- 常量時間複雜度 - 布隆過濾器 / 哈希存儲
- 對數時間複雜度 - 折半查找(二分查找)
- 線性時間複雜度 - 順序查找 / 桶排序
- 對數線性時間複雜度 - 高級排序算法(歸併排序、快速排序)
- 平方時間複雜度 - 簡單排序算法(選擇排序、插入排序、冒泡排序)
- 立方時間複雜度 - Floyd算法 / 矩陣乘法運算
- 幾何級數時間複雜度 - 漢諾塔
- 階乘時間複雜度 - 旅行經銷商問題
9) O(n!)
概念解釋:
b = n^a a叫已n爲底的b的對數
log(a)(b)=n a是底數、b是真數 n是對數;
log2N --->log24 =2 log28 =3 3是以爲2底的8的對數;
while循環每次*2 log2N *3 log3N