寫 程式 前 就 該 懂 的 演算 法

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

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

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

作者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

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

排序與音樂

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

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

內容簡介

日常生活的演算問題
加了註解的Python程式碼+大量可愛插圖
=用最簡單的方式學會演算法

本書使用大量插圖與生活實例,讓您以最簡單快速的方式進入演算法領域。翻開本書,您可透過不同主題的圖示與說明,輕鬆理解演算法概念及應用,同時向繁雜的驗證程式說bye-bye!

本書前三章為基礎篇:

第 1 章 – 除了學習第一種實用的二進位搜尋演算法外,還將學習大 O 符號。

第 2 章 – 學習陣列和連結串列兩種基礎資料結構。這兩種資料結構用來產生更進階的資料結構,例如雜湊表(參閱第 5 章)。

第 3 章 – 學習許多演算法(例如第 4 章的快速排序演算法)中經常用到的遞迴法。

本書其餘章節將介紹演算法的各種應用:

解決問題的方法 – 這是第 4、8 和 9 章的主題。如果遇到問題卻不知該如何解決,不妨試試分治演算法(第 4 章)或動態規劃演算法(第 9 章)。如果確定找不到解決辦法,就用貪婪演算法(第 8 章)給個近似答案。

雜湊表 – 這是第 5 章的主題。雜湊表是非常實用的資料結構,包含多組鍵值對,就像一個人的姓名與其電子信箱地址,或使用者名稱與其密碼配對一樣。

圖形演算法 – 這是第 6 和 7 章的主題。圖形是網路模型化的途徑,包括社群網路、道路網、神經元網路,或任何其他組合網路。廣度優先搜尋法(第 6 章)和代克思托演算法(第 7 章)是在網路兩點之間搜尋最短距離的演算法,可用來計算兩人之間的分離程度或到達目標的最短路徑。

K 最近鄰(KNN)演算法 – 這是第 10 章的主題。KNN 是一種簡易機器學習演算法,可用來建構推薦系統、OCR 引擎、股票價值預測系統,以及涉及價值預測的所有其他系統或物件分類系統。

下一步 – 這是第 11 章的主題,介紹 10 種值得繼續學習的演算法。

全書程式碼範例使用Python 2.7,請至松崗官網下載範例程式碼。

本書特色

1.涵蓋搜尋、排序和圖形等10種最常用的演算法。
2.包含400張可愛、實用的插圖與逐步詳解,幫助您將概念視覺化,有如看卡通般的完成學習。
3.比較不同演算法的效能,讓您能在遇到問題時,選出最適合解決問題的演算方法。
4.書末附有全書習題解答,讓您完成書中練習後可以馬上對照使用,找出錯誤及時修正。

作者

Aditya Y Bhargava

Aditya Y Bhargava為手工藝品網路市集 Etsy 電商公司的軟體工程師,擁有芝加哥大學電腦學工程碩士學位,工作之餘經營廣受歡迎的插圖貼文技術部落格 adit.io。

目錄

CH 01 演算法概述
CH 02 選擇排序演算法
CH 03 遞迴演算法
CH 04 快速排序演算法
CH 05 雜湊表
CH 06 廣度優先搜尋法
CH 07 代克思托演算法
CH 08 貪婪演算法
CH 09 動態規劃演算法
CH 10 K 最近鄰演算法
CH 11繼續鑽研
附錄 習題與解答

詳細資料

詳細資料

    • 編/譯者
    • 語言
    • 中文繁體
    • 裝訂
    • 紙本平裝
    • ISBN
    • 9789572246399
    • 分級
    • 普通級
    • 商品規格
    • 18開17*23cm
    • 頁數
    • 272
    • 出版地
    • 台灣
    • 適讀年齡
    • 全齡適讀
    • 注音
    • 級別

  • 商品分類:中文書電腦資訊APP開發/程式設計程式開發入門

訂購須知

加入金石堂 LINE 官方帳號『完成綁定』,隨時掌握出貨動態:

寫 程式 前 就 該 懂 的 演算 法

寫 程式 前 就 該 懂 的 演算 法

商品運送說明:

  • 本公司所提供的產品配送區域範圍目前僅限台灣本島。注意!收件地址請勿為郵政信箱。
  • 商品將由廠商透過貨運或是郵局寄送。消費者訂購之商品若無法送達,經電話或 E-mail無法聯繫逾三天者,本公司將取消該筆訂單,並且全額退款。
  • 當廠商出貨後,您會收到E-mail出貨通知,您也可透過【訂單查詢】確認出貨情況。
  • 產品顏色可能會因網頁呈現與拍攝關係產生色差,圖片僅供參考,商品依實際供貨樣式為準。
  • 如果是大型商品(如:傢俱、床墊、家電、運動器材等)及需安裝商品,請依商品頁面說明為主。訂單完成收款確認後,出貨廠商將會和您聯繫確認相關配送等細節。
  • 偏遠地區、樓層費及其它加價費用,皆由廠商於約定配送時一併告知,廠商將保留出貨與否的權利。

提醒您!!
金石堂及銀行均不會請您操作ATM! 如接獲電話要求您前往ATM提款機,請不要聽從指示,以免受騙上當!

退換貨須知

**提醒您,鑑賞期不等於試用期,退回商品須為全新狀態**

  • 依據「消費者保護法」第19條及行政院消費者保護處公告之「通訊交易解除權合理例外情事適用準則」,以下商品購買後,除商品本身有瑕疵外,將不提供7天的猶豫期:
    1. 易於腐敗、保存期限較短或解約時即將逾期。(如:生鮮食品)
    2. 依消費者要求所為之客製化給付。(客製化商品)
    3. 報紙、期刊或雜誌。(含MOOK、外文雜誌)
    4. 經消費者拆封之影音商品或電腦軟體。
    5. 非以有形媒介提供之數位內容或一經提供即為完成之線上服務,經消費者事先同意始提供。(如:電子書、電子雜誌、下載版軟體、虛擬商品…等)
    6. 已拆封之個人衛生用品。(如:內衣褲、刮鬍刀、除毛刀…等)
  • 若非上列種類商品,均享有到貨7天的猶豫期(含例假日)。
  • 辦理退換貨時,商品(組合商品恕無法接受單獨退貨)必須是您收到商品時的原始狀態(包含商品本體、配件、贈品、保證書、所有附隨資料文件及原廠內外包裝…等),請勿直接使用原廠包裝寄送,或於原廠包裝上黏貼紙張或書寫文字。
  • 退回商品若無法回復原狀,將請您負擔回復原狀所需費用,嚴重時將影響您的退貨權益。