快速掌握資料結構與演算法

(Day 13) 選擇排序 (Selection Sort)

選擇排序 (Selection Sort) 是一種簡單直觀的排序演算法。核心概念: 每一輪從尚未排序的元素中挑出最小(或最大)者,放到目前應在的位置,一直重複直到完成。可以把它想成「選拔賽」: 第一輪選出最優放第一名,第二輪從剩下的人選次優放第二名,依此類推。

(Day 12) 氣泡排序 (Bubble Sort)

終於進入演算法的部分,預計會介紹 3~4 個很常見的排序演算法,所以光排序這個主題就會用掉 3~4 天的篇幅,今天除了介紹 Bubble Sort 外,會先簡單介紹一下排序,讓各位讀者更好地認識排序演算法。

(Day 11) 演算法評估 (Algorithm Analysis)

到目前為止,我們已經介紹了各種資料結構 (Array、Linked List、Stack、Queue、Tree、Graph),也練習了基本操作。但光有資料結構還不夠,要能設計演算法,就必須懂得如何評估一個演算法的效率。

(Day 10) 圖 (Graph)

這是資料結構的最後一篇,明天開始進入本系列的重點驗算法,前面幾天,我們介紹了各種樹結構 Binary Tree、Balanced Tree,以及其他衍生樹。而樹是一種特殊的圖結構,今天我們正式進入 Graph 的世界。

(Day 9) 其他樹 (Other Trees)

在前面兩天,粗淺的介紹了 Binary Tree 與 Balanced Tree,今天更粗淺的介紹一下其他樹,因為本系列只是要做一個拋磚引玉的動作,如果讀者對於資料結構有興趣,建議可以買書來研讀。

(Day 8) 平衡樹 (Balanced Tree)

Balanced Tree 是一種特殊的二元樹結構,旨在保持樹的高度盡可能低,以提高操作效率。常見的平衡樹包括 AVL 樹、紅黑樹和 B 樹等。以下是關於平衡樹的詳細介紹。

(Day 7) 二元樹 (Binary Tree)

前面幾天所介紹的資料結構就是線性的資料結構,今天開始所介紹的樹資料節構是屬於非線性資料結構,也非常的重要。

(Day 6) 隊列 (Queue)

Queue (佇列) 與 Stack 一樣,是一種線性資料結構,但它遵循的是先進先出 (First-In-First-Out; FIFO) 的規則。你可以把 Queue 想像成排隊買票: 最早排隊的人會最先買到票並離開,而新加入的人只能站在隊伍最後。

(Day 5) 堆疊 (Stack)

Stack (堆疊) 是一種受限的線性資料結構,遵循先進後出 (Last-In-First-Out; LIFO) 的資料結構。你可想像有一疊盤子,最後放上去的盤子會最先被拿走,所以 Stack 只允許在「頂端」進行操作,簡單來說就是你不能看或是取非最上層的元素。

(Day 4) 鏈表 (Linked List)

Linked List (鏈表) 是一種常見的資料結構,用來儲存一系列的元素。與陣列 (Array) 不同,Linked List 的元素稱為節點 (Node) 在記憶體中不必是連續的。每個節點除了儲存資料外,還會儲存一個指向下一個節點的參考 (指標)。

(Day 3) 矩陣 (Matrix)

我不知道大家看到這天會不會驚訝一下,不是應該接續鏈表 (Linked List) 這是什麼? Matrix 就是 Array 只是我單獨抽出來說明,如果你沒有在學習或處理資料科學相關的,應該不會使用到 Matrix,但是我認為這是一個蠻常被忽略的部分,也就花一點篇幅來介紹它。

(Day 2) 陣列 (Array)

Array 是一種 Static Data Structure 或稱為 Dense List,它是一種將有序串列的資料結構使用 Contiguous Allocation 來儲存,意味著儲存的元素必須是相同類型,且靜態資料結構的記憶體配置是在編譯時,就必須配置給相關的變數,因此在創建時必須先宣告空間大小。

(Day 1) 介紹與準備

我遇過很多學習程式語言的人,都一直學框架或是 API 怎麼用,都不是很注重底層的知識,我認為一棟樓要蓋多高取決於地基打得多深,因為框架與 API 會變,但時間複雜度、記憶體模型、資料結構設計是不會變的。