iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
佛心分享-讓我升級的那些書

【吳桑泥的淬鍊升級書單】私心大分享系列 第 9

【吳桑泥的淬鍊升級書單】Day9 演算法的度量尺:Big O 是什麼?學會分析程式碼的效率

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250915/20124462BBswP5YvrZ.png

演算法的度量尺:Big O 是什麼?學會分析程式碼的效率

當你的程式碼在生產環境「卡死」時,你才發現演算法的重要性

不知道大家有沒有這樣的經驗:你寫了一個「看起來沒問題」的搜尋功能,在測試環境用 100 筆資料跑得很順,結果上線後面對 10 萬筆資料時,整個系統直接卡死。

老闆問:「為什麼這麼慢?」
你回答:「呃...可能是資料量太大?」
老闆再問:「那要怎麼解決?」
你:「...重啟伺服器?」

這就是不懂演算法複雜度的常見問題。

鍛鍊問題解決力!演算法與資料結構應用全圖解 | 天瓏網路書店》這本書,正是為了解決這個問題。
它用最直觀、最有趣的方式,教你如何分析程式碼的效率,並選擇正確的演算法來解決問題。

https://ithelp.ithome.com.tw/upload/images/20250923/20124462EOnTq6Zvsa.png

痛點一:面對問題沒有思路,只能暴力破解

描述:遇到一個新的、沒見過的程式問題,腦袋一片空白

場景: 老闆要求你來寫一個「找出陣列中重複元素」的功能。

初學者的直覺反應:
就像在人群中找雙胞胎,你會怎麼做?最直覺的方法就是:「每個人跟其他所有人都比對一次」——這就是暴力破解法。

問題: 這個解法能跑,但效率極差。當資料量變成 1000 筆時,你可能要等很久。

書中解方:學習常見的「演算法思維模式」

1. 空間換時間思維
想像你在圖書館找書。暴力法就像一本一本翻閱所有書籍。但聰明的方法是什麼?
建立一個「書名索引卡」!這樣你就能快速找到任何一本書。

2. 排序思維
就像整理撲克牌一樣,先把牌按照花色和數字排序,然後重複的牌就會排在一起,一眼就能看出來。

關鍵洞察: 不同的思維模式,會帶來完全不同的效率。關鍵是要學會「分析問題的本質」,而不是急著寫程式碼。

痛點二:演算法學習枯燥難懂,無法理解實際應用

描述:看演算法書就像看天書,一堆數學公式和抽象概念

傳統演算法教學的問題:

  • 直接給你公式:O(n²) vs O(n log n)
  • 抽象的數學證明
  • 沒有實際應用場景
  • 不知道什麼時候用哪種演算法

書中解方:圖解式學習 + 生活化應用

1. Big O 的生活化理解

想像你要在電話簿中找人:

O(1) - 常數時間: 你知道那個人住在第 100 頁,直接翻到那一頁
就像你知道朋友住在幾樓幾號,直接搭電梯上去一樣。

O(log n) - 對數時間: 你不知道確切位置,但知道電話簿是按字母排序的
就像玩「猜數字」遊戲,每次都猜中間值,很快就會找到答案。

O(n) - 線性時間: 你不知道排序規則,只能從頭開始一頁一頁翻
就像在沒有索引的書中找某個詞,只能逐頁搜尋。

O(n²) - 平方時間: 你要比較每個人和其他所有人
就像辦同學會,每個人要跟其他所有人握手,如果有 100 個人,就要握 4950 次手!

2. 實際應用場景分析

場景一:電商平台的商品搜尋

  • 錯誤做法: 在 100 萬筆商品中逐一搜尋關鍵字(O(n))
  • 正確做法: 建立搜尋索引,快速定位商品(O(log n))

場景二:社交媒體的好友推薦

  • 錯誤做法: 雙重迴圈比較所有好友(O(n²))
  • 正確做法: 使用集合運算快速找出共同好友(O(n))

痛點三:不知道如何選擇合適的資料結構

描述:面對不同問題時,總是使用最熟悉的 Array,導致效率低下

書中解方:理解資料結構的「權衡取捨」

1. 資料結構就像不同的收納方式

Array(陣列)- 像書架

  • 優點:知道位置就能直接拿到書(隨機存取)
  • 缺點:要插入新書時,後面的書都要往後移

Linked List(鏈結串列)- 像藏寶圖

  • 優點:插入新線索很容易
  • 缺點:要找特定線索時,必須一個一個追蹤

Hash Table(雜湊表)- 像電話簿

  • 優點:知道名字就能快速找到電話
  • 缺點:沒有順序,而且會佔用較多空間

2. 實際選擇策略

選擇 Array 的時機:

  • 需要隨機存取(像電商購物車,要快速找到特定商品)
  • 資料量固定或變化不大
  • 需要保持順序

選擇 Hash Table 的時機:

  • 需要快速查找(像用戶快取系統)
  • 不需要保持順序
  • 資料量變化很大

我的實踐:將演算法思維應用到生活決策

生活決策中的「演算法思維」

1. 購物決策:貪心法 vs 動態規劃

貪心法: 每次都選擇當前最優解
就像買東西時,每次都選最便宜的,但可能不是整體最划算的組合。

動態規劃: 考慮整體最優解
就像考慮物品的價值密度(價值/價格),找出整體最划算的組合。

2. 時間管理:優先佇列思維

就像使用優先佇列管理任務:

  • 開會(優先級 9)
  • 寫技術文章(優先級 8)
  • 回覆郵件(優先級 5)

總是先處理優先級最高的任務。

總結:演算法思維是解決問題的框架

演算法不是炫技,而是解決問題的思維框架。

有重要三個原則:

  1. 先分析問題的本質,再選擇解決方案
  2. 理解時間與空間的權衡取捨
  3. 將演算法思維應用到生活決策中

實務建議:

  • 遇到效能問題時,先分析複雜度
  • 選擇資料結構時,考慮操作頻率
  • 將演算法思維應用到日常決策

延伸閱讀推薦:
如果你喜歡這本書的圖解方式,我更強烈推薦你試試簡體版的《演算法, 4/e (Algorithms, 4/e) | 天瓏網路書店》這本大橘色書籍。
裡面所有的精華都在這裡,讓你會有更深的體悟。
https://ithelp.ithome.com.tw/upload/images/20250923/20124462zhQTGE5Wk3.png

演算法學習其實可以很有趣!
重點是要用對方法,讓抽象的知識變得具體可見。

#演算法 #BigO #程式設計 #效率優化 #吳桑泥的升級書單


上一篇
【吳桑泥的淬鍊升級書單】Day8 別讓三個月後的你,痛恨現在的自己:重讀《Clean Code》
下一篇
【吳桑泥的淬鍊升級書單】Day10 問對問題,才能得到對的答案:為什麼你的技術問題沒人理?
系列文
【吳桑泥的淬鍊升級書單】私心大分享10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言