iT邦幫忙

鐵人檔案

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

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

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

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

Day 01:什麼是演算法?

演算法這個名字給人一種充滿艱深、繁複計算的感覺,不像我們生活中可以或需要學會的東西。 但其實演算法在生活中無所不在。 廣義的演算法用白話來說,就是完成任務的一套...

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

Day 02:二分搜尋(binary search)

第一個演算法既是叫搜尋,那我們先想像一些生活中找東西的情境。 如果有一疊照座號排好的作業,要找出28號同學的,我們很可能會先拿開上面半疊,從中間開始找。 或者如...

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

Day 03:如何分析演算法?

上一回講到兩種搜尋演算法,一種是一個一個找,一種則是每次尋找都可以去掉一半的選項,好像有一種是明顯比較快的做法,可是我們要怎麼表達這樣的差異呢? 執行時間 一般...

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

Day 04:大O符號的含意

上一回提到大O符號表達執行時間,但對於大O符號我們可能有些疑問。 既是叫時間,那它的單位是什麼? 我們可以在演算法的例子中加入時間來比較一下。 如果今天有一個有...

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

Day 05:到底有多壞?演算法的最壞情況執行時間

討論演算法的執行時間到現在,我們只提最糟糕的情況,好像不斷在強調演算法的效能可以有多差。 你可能會想,就算用線性搜尋玩猜數字,最衰最衰要猜100次,那也會有很多...

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

Day 06:選擇排序(selection sort)

先前看到了常見執行時間的圖形,線條越平代表演算法速度越快,越陡則代表越慢。 我們會發現O(log n)的二分搜尋其實算是數一數二快速的演算法,不過二分搜尋的條件...

2021-09-19 ‧ 由 ramenkun 分享
DAY 7

Day 07:泡沫排序(bubble sort)

如果一個陣列中的任兩個元素是有排序的,是不是代表整個陣列就是排序好的?這就是泡沫排序的想法。 如果我們想將一列數字由小到大排好,用泡沫排序的步驟是: 兩個相鄰...

2021-09-20 ‧ 由 ramenkun 分享
DAY 8

Day 08:分治法與遞迴(1)

再繼續寫其他更快的排序演算法之前,先來寫分治法(divide-and-conquer paradigm),因為後面的演算法跟它大有關係。 分治法是一種演算法設計...

2021-09-21 ‧ 由 ramenkun 分享
DAY 9

Day 09:遞迴(2)

上一回我們看到,同樣的跨年倒數任務,可以用迴圈或遞迴的方式完成。 用迴圈通常可以看到某個變數(例如i)記錄著重複執行的次數,可是遞迴的寫法往往更簡潔,好像我們只...

2021-09-22 ‧ 由 ramenkun 分享
DAY 10

Day 10:快速排序(quicksort)

看完了分治法與遞迴,再來看這樣的方法如何解決排序問題。 快速排序是一種利用分治法的演算法,比前面提到的排序方法都要快速許多,有些程式語言的函式庫也直接包含了快速...

2021-09-23 ‧ 由 ramenkun 分享