《寫程式前就該懂的演算法》閱讀心得

by | 10 月 1, 2017

終於找到能看懂的演算法入門書。

作者 Aditya Y. Bhargava 是 Etsy 電商公司的軟體工程師,在前言有提到他是「視覺學習者」,覺得是同一類人。 我買翻譯書都會先去 Amazon 查看原文書的評價,這本評價蠻好的。

關於理解

就像我們無法理解同樣辣度的醬料,每個人吃進去所感受到的「體驗」;看書也是,同樣的內容讀進去在每個人腦海的架構跟連結差異也是巨大的。

有別於部分書籍,放了可愛圖片也沒能讓難度降低(把字換地方塞不會變簡單啊啊),不然就是文字跟圖片其實活在兩個世界(假象啊)。

本書作者用了許多有趣手繪插圖和舉例讓整本書趣味性十足,把腦海中的步驟畫出來,讓硬梆梆的主題寫成像故事書一樣,連兩天接續看完。

在腦內小劇場的聚光燈下膜拜著:「高手就是能把複雜內容講的那麼白話啊啊啊!」

閱讀門檻

讀電腦書籍時遇到的困難是起始的門檻有點過高了。

以健身房比喻好了,今天從沒接觸過的新手一踏入,卻發現場館的啞鈴最輕 5kg 起跳;眼前滿身肌肉的教練,從其他會員的風評聽到也是非常有一套無庸質疑的。

但問題是根本連第一下都舉不起來,沒有 2kg 或是更輕的啞鈴幫助新手成長到能直接使用場館的器材和吃下教練的調教。

大概是這樣的感覺吧,終於知道大 O 符號還有幾種算法背後的基本應用。

生活連結

像是玩 1 到 100 的終極密碼,一個個從頭慢慢猜最壞要猜 100 次。

但用二分搜尋法(Binary Search)每次從中剖半,留下正確的部分再剖半,7 次就能猜出來了。

當放大到 40 億個數字的終極密碼,一個個從頭慢慢猜最壞要猜 40 億次;後者只要 32 次就能猜出來了。

假設臉書會在使用者登入時,搜尋使用者名單,有在名單才能順利登入;這樣大量搜尋的情況下,二分搜尋速度就快非常多。

一些閱讀時候覺得「噢很厲害啊但平常好像用不到」,隨著內容推進慢慢冒出「仔細想想也不是沒有」。

前面提到的猜數字某種程度上也是資料搜尋。

陣列與連結串列

陣列(Arrays)與連結串列(Linked lists)。

又或者說「新增資料」。

陣列就像是一群朋友在電影院劃位,臨時冒出新加入的朋友,本來的位置可能無法坐一起,要重新劃位找能塞得下的地方。

但如果用連結串列的形式,就像餐廳的服務生把新訂單加在給廚房的末尾,影響不大;廚師繼續工作從前面開始消化。

但如果是「讀取資料」呢?

電影院的每個位置都有對應的號碼(索引),假設想知道特定位置的銷售狀況馬上能查清楚;而後者餐廳服務生想要找特定訂單,就需要花點時間每張都確認。

頭腦體操

許多演算法的應用和概念都能在日常生活看到啊~

記得以前綜藝節目看過那種放觀眾進去賣場,時間內能抱出來都是獎品,觀眾腦海也是跑演算法(?),可能是體積、價錢、路徑;農民在替農產品分類也是依據特徵,用某個算法來分等級加權重,處處都是。

一直到旅遊景點的規劃,可能從物理上的最短路徑考慮、或是從最快的交通速度為出發點、整團人出遊要怎麼在有限的時間內盡量滿足到每個人各自的需求等等。

連結到生活就覺得也不那麼抽象了,有種頭腦體操的感覺。

原中文書《寫程式前就該懂的演算法》似乎已絕版,新版書籍為《白話演算法!培養程式設計的邏輯思考》

吳 致賢

吳 致賢

擁有 App/Web 開發經驗的軟體 PM,從 0 到 1 執行過 20 個以上全客製專案,包含悠遊付、friDay 影音等。關於我的簡歷點此

Recent Posts

時尚與穿搭,啟蒙我審美的影片

時尚與穿搭,啟蒙我審美的影片

在 YouTube 與 bilibili 看了超過一百部關於時尚、穿搭、服飾主題的影片,整理出幾個精選,希望讓讀者們從比較有趣的角度瞭解:)