iT邦幫忙

鐵人檔案

2021 iThome 鐵人賽
回列表
自我挑戰組

30天不怕演算法:白話文版 系列

程式小學徒用生活案例 + 虛擬碼 + 程式碼看無所不在的演算法。

鐵人鍊成 | 共 30 篇文章 | 21 人訂閱 訂閱系列文 RSS系列文
DAY 11

Day 11:合併排序(mergesort)

合併排序(merge sort 或 mergesort)是另一種採用分治法的排序演算法。它的步驟是: 分割:用遞迴的方式,將長度為n的數列分成兩半,直到子數列...

2021-09-24 ‧ 由 ramenkun 分享
DAY 12

Day 12 :陣列(array)與鏈結串列(linked list)

討論過這麼多種演算法之後,會發現操作時常常會使用陣列或是某些資料結構。資料結構是指電腦中管理資料的特定方式,有助於資料的運用,選擇適合的結構也可以增進演算法效率...

2021-09-25 ‧ 由 ramenkun 分享
DAY 13

Day 13:雜湊表(hash table)

在通訊錄或朋友列表裡,我們可以搜尋一個名字,就找到電話或頁面,只需要O(1)。如果想要實現這樣的操作,可以想像一種融合上一回陣列和鏈結串列的資料結構。 雜湊函式...

2021-09-26 ‧ 由 ramenkun 分享
DAY 14

Day 14:安全雜湊演算法(SHA)

上回提到的雜湊函式,除了雜湊表外,還有不少有趣的應用。 其中一種就是安全雜湊演算法(全名Secure Hash Algorithm,縮寫SHA),它是一個加密雜...

2021-09-27 ‧ 由 ramenkun 分享
DAY 15

Day 15:樹(tree)

樹是一種抽象資料結構,跟鏈結串列一樣是由節點組成的資料集合。它的形狀類似家族樹,或者說像向下生長的樹,最上面有一個根節點(如下圖A),每個節點都可以有零個或多的...

2021-09-28 ‧ 由 ramenkun 分享
DAY 16

Day 16:堆積(heap)與字首樹(trie)

上一回寫到樹,今天的主題是以樹結構為基礎的資料結構。 堆積 二元樹(binary tree)是每個節點最多只有兩個子節點的樹結構,而其中完全二元樹(comple...

2021-09-29 ‧ 由 ramenkun 分享
DAY 17

Day 17:圖與演算法

有一些演算法是在圖(graph)上操作,我們可以先想一些實際的例子,例如: 開車的時候,使用導航系統找到最短路徑抵達目的地。 下棋的程式知道如何利用最少...

2021-09-30 ‧ 由 ramenkun 分享
DAY 18

Day 18:廣度優先搜尋(BFS)

上一回提到廣度優先搜尋的步驟是檢查圖中節點,並將與其相連的節點放入佇列中,再一一檢查。 光是這樣的文字描述,可能感覺只是線性地檢查所有節點,但其實廣度優先搜尋的...

2021-10-01 ‧ 由 ramenkun 分享
DAY 19

Day 19:深度優先搜尋(DFS)與拓樸排序(topological sorting)

深度優先搜尋(depth-first search, DFS)是一種搜尋整張圖所有節點的演算法。它的名稱也表達出跟廣度優先搜尋的順序不太一樣,它是從根節點(樹的...

2021-10-02 ‧ 由 ramenkun 分享
DAY 20

Day 20:Dijkstra演算法

先前我們利用廣度優先搜尋,找到圖中兩節點之間的最短路徑,其中所謂「最短」是指「經過最少的邊」。可是這樣的路徑卻未必是最快路徑,因為現實生活中不會每條路徑的距離或...

2021-10-03 ‧ 由 ramenkun 分享