描述
內容簡介
★★★★★【650張圖例】+【圖解演算法原理和邏輯思維】★★★★★ ★★★★★【20個主題】+【220個Python程式實例】★★★★★ ★★★★★【邏輯思維】+【Python實作】=【演算法的精髓】★★★★★
本書的第一版曾經獲得博客來與天瓏暢銷排行榜第1名,撰寫這本書時採用下列原則。 1:彩色圖片引導讀者認識演算法的邏輯思維。 2:Python程式實作演算法原理。 3:章節習題引導讀者複習與自我練習。 當讀者遵循這步驟學習時,相信一定可以完整學習演算法的相關知識,本書的主體內容如下: ☆ 20個主題 ★ 認識時間複雜度和空間複雜度 ☆ 7大資料結構完整圖說與程式實例 ★ 7大排序法完整圖說與程式實例 ☆ 遞迴與回溯演算法 ★ 電腦領域的經典演算法八皇后和河內塔 ☆ 碎形與VLSI設計應用 ★ 圖形理論 ☆ 深度、寬度優先搜尋 ★ Bellman-Ford演算法 ☆ Dijkstra’s演算法 ★ 貪婪演算法 ☆ 動態規劃演算法 ★ 資訊安全演算法 ☆ 摩斯與凱薩密碼 ★ 金鑰系統觀念,解說設計金鑰方法或是應用目前市面上成熟的金鑰 ☆ 訊息鑑別碼(Message authentication code) ★ 數位簽章(Digital Signature) ☆ 數位憑證(Digital certificate) ★ 基礎機器學習KNN演算法 ☆ K-means演算法 ★ 網頁排名演算法 ☆ 常見的演算法考題與Leetcode考題
|
作者簡介
洪錦魁
一位跨越電腦作業系統與科技時代的電腦專家,著作等身的作家。 n DOS時代他的代表作品是IBM PC組合語言、C、C++、Pascal、資料結構。 n Windows時代他的代表作品是Windows Programming使用C、Visual Basic。 n Internet時代他的代表作品是網頁設計使用HTML。 n 大數據時代他的代表作品是R語言邁向Big Data之路。 n 人工智慧時代他的代表作品是機器學習彩色圖解 + 基礎數學與基礎微積分 + Python實作 4:演算法最強彩色圖鑑 + Python程式實作王者歸來 5:matplotlib從2D到3D資料視覺化 6:機器學習彩色圖解 + 基礎數學、基礎微積分 + Python實作王者歸來 7:R語言邁向Big Data之路王者歸來 8:Excel完整學習、Excel函數庫、Excel VBA應用王者歸來 9:Python操作Excel最強入門邁向辦公室自動化之路王者歸來 10:Power BI最強入門 – 大數據視覺化+智慧決策+雲端分享王者歸來
|
目錄
第一章 演算法基本觀念
1-1 電腦的演算法 ........................................ 1-3 1-2 遞迴函數設計 ........................................ 1-4 1-3 好的演算法與不好的演算法 ............... 1-11 1-4 程式執行的時間量測方法 – 時間複雜度 ....................................... 1-15 1-5 記憶體的使用 – 空間複雜度 ............... 1-21 1-6 資料結構 ............................................. 1-25 1-7 習題 ..................................................... 1-26 第二章 陣列(Array) 2-1 基本觀念 ............................................... 2-2 2-2 使用索引存取陣列內容 ......................... 2-2 2-3 新資料插入陣列 .................................... 2-3 2-4 刪除陣列元素 ........................................ 2-5 2-5 思考陣列的優缺點 ................................ 2-6 2-6 與陣列有關的Python 程式 ................... 2-7 2-7 習題 ..................................................... 2-12 第三章 鏈結串列(Linked list) 3-1 鏈結串列資料形式與記憶體觀念 .......... 3-2 3-2 鏈結串列的資料讀取 ............................. 3-3 3-3 新資料插入鏈結串列 ............................. 3-3 3-4 刪除鏈結串列的節點元素 ..................... 3-4 3-5 循環鏈結串列(circle linked list) ............ 3-4 3-6 雙向鏈結串列 ........................................ 3-5 3-7 陣列與鏈結串列基本操作時間複雜度 比較 ....................................................... 3-5 3-8 與鏈結串列有關的Python 程式 ............ 3-5 3-9 習題 ..................................................... 3-19 第四章 佇列(Queue) 4-1 資料插入enqueue ................................ 4-2 4-2 資料讀取dequeue ................................ 4-3 4-3 使用串列模擬佇列的操作 ..................... 4-4 4-4 與佇列有關的Python 模組 ................... 4-6 4-5 習題 ....................................................... 4-7 第五章 堆疊(Stack) 5-1 資料堆入push ....................................... 5-2 5-2 資料取出pop ........................................ 5-4 5-3 Python 實作堆疊 ................................... 5-5 5-4 函數呼叫與堆疊運作 ............................. 5-8 5-5 遞迴呼叫與堆疊運作 ........................... 5-10 5-6 習題 ..................................................... 5-13 第六章 二元樹(Binary Tree) 6-1 建立二元樹 ............................................ 6-2 6-2 刪除二元樹的節點 ................................ 6-4 6-3 搜尋二元樹的數據 ................................ 6-8 6-4 更進一步認識二元樹 ............................. 6-9 6-5 記憶體儲存二元樹的方法 ................... 6-11 6-6 Python 實作二元樹 ............................. 6-12 6-7 二元樹的缺點 ...................................... 6-39 6-8 習題 ..................................................... 6-39 第七章 堆積樹(Heap Tree) 7-1 建立堆積樹 ............................................ 7-2 7-2 插入數據到堆積樹 ................................ 7-4 7-3 取出最小堆積樹的值 ............................. 7-6 7-4 最小堆積樹與陣列 ................................ 7-8 7-5 Python 內建堆積樹模組heapq ............. 7-9 7-6 Python 硬功夫 - 自己建立堆積樹模組 . 7-15 7-7 習題 ..................................................... 7-18 第八章 雜湊表(Hash Table) 8-1 基本觀念 ............................................... 8-2 8-2 雜湊表轉成陣列 .................................... 8-3 8-3 搜尋雜湊表 ............................................ 8-8 8-4 雜湊表的規模與擴充 ............................. 8-9 8-5 好的雜湊表與不好的雜湊表 ............... 8-11 8-6 雜湊表效能分析 .................................. 8-12 8-7 Python 程式應用 ................................. 8-13 8-8 認識雜湊表模組hashlib ...................... 8-16 8-9 習題 ..................................................... 8-21 第九章 排序 9-1 排序的觀念與應用 ................................ 9-2 9-2 泡沫排序法(Bubble Sort)...................... 9-4 9-3 雞尾酒排序(Cocktail Sort) .................. 9-10 9-4 選擇排序(Selection Sort) .................... 9-14 9-5 插入排序(Insertion Sort) .................... 9-18 9-6 堆積樹排序(Heap Sort) ...................... 9-21 9-7 快速排序(Quick Sort) ......................... 9-26 9-8 合併排序(Merge Sort) ........................ 9-29 9-9 習題 ..................................................... 9-35 第十章 數據搜尋 10-1 順序搜尋法(Sequential Search) .......... 10-2 10-2 二分搜尋法(Binary Search) ................ 10-3 10-3 搜尋最大值演算法 .............................. 10-6 10-4 習題 ..................................................... 10-7 第十一章 堆疊、回溯演算法與迷宮 11-1 走迷宮與回溯演算法 ........................... 11-2 11-2 迷宮設計堆疊扮演的角色 ................... 11-5 11-3 Python 程式實作走迷宮 ...................... 11-6 11-4 習題 ..................................................... 11-9 第十二章 從遞迴看經典演算法 12-1 費波納契(Fibonacci) 數列 .................. 12-2 12-2 河內塔演算法 ...................................... 12-4 12-3 八皇后演算法 .................................... 12-17 12-4 碎形 – VLSI 設計演算法 ..................... 12-21 12-5 習題 ................................................... 12-25 第十三章 圖形(Graph) 理論 13-1 圖形(Graph) 的基本觀念 .................... 13-2 13-2 廣度優先搜尋演算法觀念解說 ............ 13-6 13-3 Python 實作廣度優先搜尋演算法 ..... 13-13 13-4 深度優先搜尋演算法理論與實作 ...... 13-22 13-5 習題 ................................................... 13-30 第十四章 圖形理論之最短路徑演算法 14-1 戴克斯特拉(Dijkstra's) 演算法 ............ 14-2 14-2 貝爾曼- 福特(Bellman-Ford) 演算法 . 14-7 14-3 A* 演算法 .......................................... 14-10 14-4 習題 ................................................... 14-14 第十五章 貪婪演算法(Greedy Algorithm) 15-1 選課分析 ............................................. 15-2 15-2 背包問題 – 貪婪演算法不是最完美的 結果 ..................................................... 15-5 15-3 電台選擇 ............................................. 15-8 15-4 業務員旅行 ........................................ 15-16 15-5 NP-Complete 問題 ............................. 15-24 15-6 習題 ................................................... 15-25 第十六章 動態規劃演算法 16-1 再談背包問題 – 動態規劃演算法 ........ 16-2 16-2 旅遊行程的安排 ................................ 16-12 16-3 挖金礦問題 ........................................ 16-14 16-4 最長共用子字串 ................................ 16-15 16-5 習題 ................................................... 16-20 第十七章 資料加密到資訊安全演算法 17-1 資料安全與資料加密 ........................... 17-2 17-2 摩斯密碼(Morse code) ....................... 17-5 17-3 凱薩密碼 ............................................. 17-7 17-4 再談文件加密技術 .............................. 17-9 17-5 全天下只有你可以解的加密程式? ... 17-10 你也可能無法解? ............................. 17-10 17-6 雜湊函數與SHA 家族 ....................... 17-12 17-7 金鑰密碼 ........................................... 17-18 17-8 訊息鑑別碼 (Message authentication code) ......... 17-27 17-9 數位簽章(Digital Signature) .............. 17-28 17-10 數位憑證(Digital certificate) ............. 17-30 17-11 習題 ................................................... 17-33 第十八章 人工智慧破冰之旅-KNN 和 K-means 演算法演算法 18-1 將畢氏定理應用在性向測試 ............... 18-2 18-2 電影分類 ............................................. 18-4 18-3 選舉造勢與銷售烤香腸 ....................... 18-7 18-4 K-means 演算法 .................................. 18-9 18-5 習題實作題 ........................................ 18-15 第十九章 常見職場面試的演算法 19-1 自動販賣機找零錢的問題 ................... 19-2 19-2 基數轉換 ............................................. 19-4 19-3 質數(Prime number) 測試 .................. 19-6 19-4 回文(Palindrome) 演算法 ................... 19-8 19-5 歐幾里德演算法 .................................. 19-9 19-6 最小公倍數(Least Common Multiple) .......................................................... 19-12 19-7 雞兔同籠的問題 ................................ 19-13 19-8 網頁排名PageRank ........................... 19-14 19-9 習題 ................................................... 19-19 第二十章 精選LeetCode 考題演算法 20-1 爬樓梯問題 ........................................ 20-2 20-2 小偷偷物品問題 ................................. 20-3 20-3 最少經費粉刷房子 ............................. 20-4 20-4 粉刷籬笆的方法 ................................. 20-5 20-5 棒球比賽得分總計 ............................. 20-7 20-6 判斷2 個矩形是否相交 ..................... 20-9 20-7 分糖果問題 ...................................... 20-10 20-8 記錄機器人行走路徑 ....................... 20-11 20-9 設計滿足小孩分餅乾的問題 ............ 20-13 20-10 賣檸檬汁找錢的問題 ...................... 20-14 |
序
這本書的第一版曾經獲得博客來與天瓏暢銷排行榜第1 名。
市面上已經有許多演算法的書籍,這些書籍普遍的缺點如下: 紙上談兵不切實際,只介紹演算法原理,只有很少的片段程式碼。讀者學會哪些書籍所述的演算法原理,最後依舊沒有實作能力,其實演算法的原理不困難,如何將原理用程式實作才是演算法的精髓。 書籍不是使用 Python 實作,與當前最熱門的 Python 程式脫鉤,未來無法融入企業電腦環境。 撰寫這本演算法書籍,筆者時時記住下列2 個原則: 1: 用彩色圖片引導讀者認識演算法的邏輯思維,方便讀者輕鬆學習,這本書包含了約650 張演算法的邏輯思維圖片,這也是目前演算法書籍有最多彩色邏輯思維圖片的書籍。 2: 教導讀者使用Python 實作演算法理論,全書共有149 個程式實例 + 71 個習題實作,這也是目前演算法書籍有最多Python 程式實例的書籍。 這本書是筆者所著演算法書籍的第3 版,相較前一版,主要增加下列內容: 獨家彩色圖解河內塔移動過程的步驟與原理 自動販賣機 基數轉換 重新詮釋歐幾里德演算法 網頁排名 Page Rank 演算法 增加 LeetCode 考題 棒球比賽得分總計 判斷 2 個矩形是否相交 分糖果問題 記錄機器人行走路徑 設計滿足小孩分餅乾的問題 賣檸檬汁找錢的問題 小細節修訂約 100 處 這是一本使用Python 從零開始指導讀者的演算法入門書籍,從基礎資料結構與演算法開始,同時解說資訊安全演算法,網頁排名演算法,人工智慧入門的KNN 和K-means 演算法,最後則精選著名的LeetCode 考題演算法。整本書的特色是彩色圖片引導演算法理論的邏輯思維與Python 實作同步解說,讓讀者可以很輕鬆掌握相關知識。 全書內容包含149 個程式實例,使用約650 張完整圖表或圖例,完整解說7 種資料結構,數十種演算法相關知識,這本書包含下列主要內容。 時間複雜度 空間複雜度 7 大資料結構完整圖說與程式實例 特別使用二元樹和堆疊解圖形解說遞迴中序、前序和後序列印 7 大排序法完整圖說與程式實例 二分搜尋與遍歷 分治法 (Divide and Conquer) 遞迴與回溯演算法 八皇后與河內塔 碎形與 VLSI 設計應用 圖形理論 深度、寬度優先搜尋 Bellman-Ford 演算法 Dijkstra's 演算法 貪婪演算法 動態規劃演算法 資訊安全演算法 摩斯與凱薩密碼 金鑰系統觀念,也解說設計金鑰方法或是應用目前市面上成熟的金鑰。 訊息鑑別碼 (Message authentication code) 數位簽章 (Digital Signature) 數位憑證 (Digital certificate) 基礎機器學習 KNN 演算法,不過讀者不用擔心這是分類與迴歸的數學或是統計問題,筆者將拋棄數學公式,用很平實語句敘述搭配程式實例,讓讀者徹底了解此演算法。 在機器學習的無監督學習中,K-means 演算法常被用來做特徵學習,筆者也將拋棄數學公式,用很平實語句敘述搭配程式實例,讓讀者徹底了解此演算法。 網頁排名演算法 常見的演算法考題與 Leetcode 考題 一本書的誕生最重要價值是有系統傳播知識,讀者可以從有系統知識架構,輕鬆、快速學會想要的知識。 寫過許多的電腦書著作,本書沿襲筆者著作的特色,程式實例豐富,相信讀者只要遵循本書內容必定可以在最短時間使用Python 精通演算法應用,編著本書雖力求完美,但是學經歷不足,謬誤難免,尚祈讀者不吝指正。 洪錦魁2022/10/10 jiinkwei@me.com |