[深度書評] 「會動的演算法」(旗標科技,2022)

評分:4 分,滿分為 5。
  • 作者:渡部有隆、Mirenkov Nikolay
  • 譯者:王心薇
  • 出版社:旗標科技
  • 出版日期:2022-10-19
  • ISBN:9789863127079
  • 售價:NT$620
  • 書籍連結旗標科技博客來
  • 書籍種類:自修用書籍
  • 適合讀者:學過一種程式語言,想精進程式設計功力的人
如果演算法抽象到讓你頭痛,不妨來看看這本有滿滿動畫的書!

紀俊男老師 ★ 4 顆星評價

「資料結構」與「演算法」,一直並稱資訊系兩大內功。只要學會了,不管你使用哪種程式語言,都可以瞬間讓你展現出來的功力,高出別人好幾個等級。就像有內功的高手,同樣使出一招,其威力也比完全不會內功的人,威力強大好幾倍。

可惜的是,這兩門技術比較艱深,很難自修學會。主要原因,是它們比較抽象,又不像一般程式語言可以透過「執行看看」、對比原始碼與執行結果來習得。但這本書透過大量圖示、搭配 QRCode 掃描提供清楚的動畫,讓讀者不必透過閱讀文字,就能「秒懂」演算法的運作原理。

在這篇書評裡,我將告訴您「這是怎麼樣的一本書」,並透過螢幕截圖讓您了解「這本書的內容在講什麼」。之後會分析這本書的「優缺點」,讓您能看完後,決定自己是否該購買這本書,減少「封面與內容不符」的憾事(嗯哼~這種恨紳士們都懂的… (¬‿¬) )。

這本書在講什麼?

其實就是在講「資料結構」跟「演算法」這兩個主題。

那這本書不一樣的地方在哪裡呢?我覺得旗標出版社官方 YouTube 對這本書的簡介做得不錯,言簡意賅,就容我借花獻佛一下:

會動的演算法:61 個演算法動畫+全圖解逐步拆解,人工智慧、資料分析必備

看完之後,您應該對這本書的特色很清楚了!這是一本以「圖示」與「動畫」,將資料結構與演算法以視覺的方式,介紹給讀者的書。

官網還提供了額外的「動畫」、「文字解說」、「虛擬碼」,讓每個演算法能更清楚地呈現在讀者的面前。您可以點擊下列連結,觀看本書所提供的輔助教材:

https://www.flag.com.tw/activity/F2708/exercise/books/

什麼是資料結構與演算法?

「資料結構」,就是在研究該怎麼擺放使用者輸入的資料,好讓待會兒運算的時候,可以達到最佳的效能。而「演算法」,就是在研究各種資料處理的技法。好讓使用者輸入的資料,能夠轉換成我們想要的答案。

拿烹飪來說,「資料結構」好比學習如何處理食材,以便讓它在後續的烹調中,能引出最大的美味。如「雞肉」需要拍鬆、並且醃過,待會兒才會沒腥味,吃起來口感比較好。而「演算法」就像學習烹飪「煎、煮、炒、炸…」各種處理技巧。以便把食材處理成我們想要的味道與口感。

所以,學好「資料結構」跟「演算法」,你才知道要如何處理使用者輸入的資料,也才知道怎麼把它們運算轉換成我們想要的結果。這就是為什麼資訊系學生,除了程式語言外,一定會學「資料結構」與「演算法」的原因。

我當初買回家的理由是什麼?

我的老粉絲知道,我買書有一套自己的準則。會透過對照書封的承諾,與快速瀏覽目錄,來初步檢視這本書有沒有做到自己承諾的目標。如果有,那就買回家。如果沒有,那就放回書架再聯絡。看完書封、並對照內容後,我覺得這本書做到了它最大的承諾:

  • 用「圖示」與「影片」將抽象原理視覺化:看到封面這句話,我馬上隨意翻了一下內頁。發現這本書真的是用大量的精神,將演算法的運作原理,以圖形的方式呈現給讀者。看完下列截圖,相信你也會跟我一樣,發出「給過!」的決定:
    4-3 圖形(Graph)

    如果一本書能做到它封面上的承諾,且內容不跑題,則我就會把它買回家。

    這本書包含了哪些內容?

    全書分成三大部分:

    • Part 1:準備篇
    • Part 2:空間結構
    • Part 3:演算法與資料結構

    「Part 1:準備篇」主要講所有程式語言的共通元素。包括:變數、運算、分支、迴圈、函數、物件、指標…等。也順便講了如何量測一個演算法好壞的標準「Big O 符號」。

    「Part 2:空間結構」講的是如何將資料排列成容易處理的樣子,好讓各種演算法在取用資料時,能夠寫出最順手的程式碼。這部分其實包含三大空間結構:「線型」(陣列、串列)、「樹狀」(二元樹)、「集群」(圖、群)。看完後,對於資料可以排列成哪些形狀,心裡應該就有個底了。

    「Part 3:演算法與資料結構」就是在講如何用程式碼,存取並運算在「Part 2:空間結構」排列好的資料。有點類似廚房小學徒已經會所有食材的前處理了,大廚開始教「煎、煮、炒、炸…」等技法的階段。這部分從最簡單的「數值互換」、「極大極小」、「加總」、「搜尋」、「排序」,一直到進階的「堆疊」、「佇列」、「堆積」、「二元樹走訪」、「雜湊」、「廣度/深度優先搜尋」、「最小生成樹」、「最短路徑」…等手法。學會後,就如同磨練了三年、已經能獨立烹煮各種菜餚的副廚一樣,可以獨立開業、「出師」了!

    每個演算法都會有很詳細的圖片解釋。包含「問題描述」、「演算法執行過程」、「演算法重點說明」、「虛擬碼演示」等小節。還能掃描 QR Code,取得動畫演示。真的是非常貼心。我提供其中一個小節的螢幕截圖,相信各位也會跟我有一樣的感受:

    這本書的優缺點

    在我看完這本書之後,我把我心目中這本書的優缺點列給各位參考。這些優缺點非常具有主觀意識。也就是說,我認為的優點,對您未必是優點。我認為的缺點,可能您會覺得一點也不在意。所以麻煩各位把我列出來的優缺點做為參考即可。不必深究。

    優點

    • 清楚的圖示、影片。
    • 沒有冗長的文字描述,輕鬆易懂。
    • 額外提供影片等輔助教材。

    缺點

    • 用「虛擬碼」容易會讓程度不是很好的同學,難以看懂之後,轉換成他們熟悉的程式語言實作。若能附上 Python、Java、C/C++ 三大語言實作的程式碼,額外供人下載,可能更好。不過我也清楚要做到這種程度,非常勞心勞力。
    • 章節順序若能調整一下會更好。目前是把「資料結構」與「演算法」拆開成兩部分的方式編排。但以學習者的角度來說,學完資料結構若能馬上接相應的演算法,會讓讀者更能當場體會「原來這麼安排資料是為了要這樣用」。拆成兩部分,容易讓讀者讀前半段時,有「學了一大堆東西,但很迷惑不知道學這些要幹嘛」的感覺。
    • 若每個演算法能提供「實際應用場合」會更好。目前的做法,都只有提供簡單的圖說與虛擬碼就停止了。這些資料結構與演算法,實際用在哪些地方,則沒有提及。如果能舉個例子,告知這些資料結構與演算法在業界實際是怎麼使用,會讓讀者有更深的感受。

    結論:我如何評價這本書

    老樣子,想知道我怎麼替一本書客觀打分數的,可以看這篇文章。我這邊就直接評分。

    結構:1 星全拿

    • 標題、前言所承諾提供的知識,是否有好好地回答?→ Yes!
    • 章節安排是否由淺入深?→ Yes!
    • 有無缺少的章節?→ No!章節涵蓋主題程度完整良好!

    內容:0.5 顆星(部分達成)

    • 文筆清晰否?→ Yes!
    • 段落分明否?→ Yes!
    • 能否確切回答標題所承諾的知識?→ Yes!
    • 錯別字多否?→ No!
    • 翻譯通順否?→ Yes!
    • 對於專有名詞能否適切解釋?→ Yes!
    • 資訊量是否夠深夠豐厚?→ Yes!
    • 範例多否?→ 可惜,本書著重演算法的說明,比較少一些實際的範例。
    • 能否適切使用「範例」、「隱喻」,讓人容易了解內容?→ 只能說「有」,但不能算多!

    排版:1 星全拿

    • 是否舒適易讀?→ Yes!
    • 圖文之間會不會太擠?→ No!
    • 字體選用會不會太擠?→ No!
    • 程式碼排版有加行號嗎?是否輕鬆易讀?→ Yes!
    • 會大量留白,有強增頁數、提高售價之嫌嗎?→ No!
    • 會塞太多出版商廣告影響閱讀體驗嗎?→ No!

    配圖:1 星全拿

    • 過多或過少?→ 剛好!
    • 能否輔助說明文字?→ Yes!

    參考:0.5 顆星(部分達成)

    • 索引 → 有英文索引,但沒有中文索引。
    • 參考書目 → Yes!
    • 進階閱讀 → 可惜!沒有。

    總結:4 顆星好書!值得您的收藏!

    對於「資料結構」與「演算法」這麼抽象的東西,原作者能把它寫成如此淺顯易懂,著實不簡單。光要替每個演算法做動畫、畫示意圖、寫虛擬碼,也曾經寫過書的我想著就會發抖…(笑)。若能在提供每個演算法實際應用場合,並增加一些進階閱讀的提示或材料,那這本書絕對值得五顆星!

    總之,這是一本在資料結構與演算法領域中,難得一見的簡明易懂好書!加上資料結構與演算法不太會「過時」,因此非常值得您買來收藏!

    分享與參考

    如果你也喜歡像這樣的深度書評,麻煩您幫忙轉發推廣。若能藉由各位的推廣,得到廠商的青睞,將來能接點業配,賺點小錢,那我會更加無後顧之憂地撰寫更多優質內容,提供給各位的!非常感謝!

    發表迴響

    這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料