電腦科學的範圍太廣大,永遠有學不完的東西,趁看過記憶猶新時把相關的東西記錄起來,以後日後查找方便。
有趣題目
- 演算法
- Python
- SDN / NFV
- OPTEE / ATF
時間複雜度
- 溫故知新
- log n = x 的意思是 n = 2^x
- 當 n = 4 時,程式會在 2 個步驟完成(4 = 2²)
- 當 n = 16 時,程式會在 4 個步驟完成(16 = 2⁴)
- 常見的六種時間複雜度與演算法
- O(1):陣列讀取
- O(n):簡易搜尋
- O(log n):二分搜尋
- O(n²):選擇排序法、插入排序法
- O(n logn):合併排序法
- O(2^n):費波那契數列
資料結構
Array
優點
- Random access 存取資料只需要O(1)時間。
- 相較pointer節省記憶體空間
缺點
- 新增/修改資料時很麻煩,花費O(N)時間在搬動資料。
適用
- 快速存取。
- 已知資料數量。
- 記憶體有限。
Linked List
優點
- 新增、修改較Array簡單,只需對O(1)個節點調整pointer、無需搬動其餘元素。
- 資料量為動態,無需像Array般resize。
缺點
- 搜尋的時間複雜度為O(N)。
- 需要額外記憶體儲存pointer。
適用
- 資料量無法預期。
- 需頻繁新增刪除資料。
- 無需快速查詢。
Stack
Last-In-First-Out
LinkedList: pop_front(), push_front()
Queue
First-In-First-Out
LinkedList: pop_front(), push_back()
Heap
Binary Search Trees
Hash Tables
Graphs
Set
Uniqu values without any particular order.
Search
Merge Sort
Quick Sort – Pivot
Heap Sort
Binary Search
嵌入式
Concurrency – Multi-thread 把同個任務拆成數個子任務,同時運行。
Parallelism – Load balancing 把存取網頁的訪客,分配到不同多個伺服器。
學校學習
參考資料
初學者學演算法|從時間複雜度認識常見演算法 程式麻瓜的程式知識課(四)
初學者學演算法|排序法入門:選擇排序與插入排序法 程式麻瓜的程式知識課(五)
初學者學演算法 | 排序法進階 : 合併排序法 程式麻瓜的程式知識課(六)
Second Round – 初學者寫給初學者的演算法教學