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

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

(文章同步刊登於部落格,閱讀體驗更好)

作者Aditya Y. Bhargava是Etsy 電商公司的軟體工程師,在前言有提到他是「視覺學習者」,覺得是同一類人。

我買翻譯書都會先去amazon查看原文書的評價,這本評價蠻好的。

關於理解

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

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

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

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

閱讀門檻

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

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

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

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

生活連結

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

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

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

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

一些閱讀時候覺得「噢很厲害啊但平常好像用不到」,隨著內容推進慢慢冒出「仔細想想也不是沒有」。前面提到的猜數字某種程度上也是資料搜尋。

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

又或者說「新增資料」。

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

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

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

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

拉近距離

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

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

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

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

書籍連結

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

哈佛 CS 50

如果暫時對演算法沒什麼興趣,或是看完後想複習;哈佛CS50的第三堂課在講演算法,擷取一些段落。

人肉冒泡排序 Human Bubble Sort

兩兩比較交換大小,每輪數字最大的會被排到最後放好。

人肉選擇排序 Human Selection Sort

影片在未排序資料找出最小的,依序擺到前面。

排序與音樂

最後三分鐘老師用帶有聲音的排序讓同學們感受不同排序法的感覺。

我喜歡透過分享幫助更多朋友,文章回饋、或是任何想法,歡迎透過臉書訊息與我聯繫。如果文章有所幫助,別忘了鼓掌灌溉、手指留香喔! ✧*。٩(ˊᗜˋ*)و✧*。

--

--