先說一下我的背景
我讀的科系跟軟體知識完全沒有關係,是大四下對軟體開發有興趣,學了之後就奮不顧身的踏進了網頁開發的領域。
目前是資歷一年的前端工程師,工作之後在切版都沒有什麼問題,邏輯的設計上都可以應付,但總覺得自己寫出的程式碼與資深同事寫出來的總是有落差,研究了一陣子演算法之後,發現對自己的開發的邏輯跟思考脈絡有很大的幫助,所以決定開始一系列的學習,也希望自己可以朝成為資深工程師的路更前進一步。
接下來會寫一系列的演算法與資料結構相關系列筆記跟心得,也會搭配一些 LeetCode 的題目,脈絡會根據下方參考資料中綜合出一個版本。
動機
- 資料結構:就是把資料整理成最佳存取效率的結構
正如居家收納,好的收納方式可以讓物品井然有序,取用時方便又快速,反之,凌亂的收納方式,當想要找出想要的物品時,就得要大費周章。資料結構就是程式執行過程中,資料被收納的方式,同樣的一堆資料,用不同結構儲存,就會帶來不同的優缺點,進而左右資料存取的效率。
在成為資深工程師的路上,學習資料結構可以促進我解決能力的問題,使複雜的問題變得簡單,好處理。
學習目標與文章架構(待邊寫邊更新)
什麼是 Big O
演算法
- 六種排序(bubble、insertion、selection、merge、heap、quick)
- 搜尋(Linear、binary)
- 遞迴(recursion)
- Dynamic Programming
- Greedy
資料結構
- B Linked List
- B Doubly Linked List
- B Queue
- B Stack
- B Hash Table
- B Heap - max and min heap versions
- B Priority Queue
- A Trie
- A Tree
- A Binary Search Tree
- A AVL Tree
- A Red-Black Tree
- A Graph (both directed and undirected)
- A Bloom Filter