|
|
|
解析演算法結構
實際操作 加深學習 精選課堂練習
資料結構、排序、搜尋etc… 從基礎到應用準則完全圖解
‧詳細講解各種演算法的特色 ・學會如何選擇適當的演算法 ・跨頁閱讀適合初學者或複習自學 ・涵蓋機器學習結構到活用範例
堅實的基礎知識「實用」的工具書 需要懂得因應場景選擇適當的演算法,才能夠建立有效率的程式。即便獲得的成果相同,但使用的演算法會讓處理效率大不相同。不過對演算法抱持著「看不出有什麼差異」「好複雜好像很難」排斥心態的學習者想必是大有人在。因此,本書中的每個主題皆是以跨頁,並搭配圖解的講解方式幫助讀者從零開始學習演算法的基礎知識。
推薦給符合以下條件的讀者 ‧想學習演算法的基礎知識 ‧想拓展知識領域更上一層樓 ‧想成為懂得如何選擇演算法的人 ‧想成為能快速又正確建立程式的人
|
|
前言
第 1 章 演算法的基本概念 ~演算法的功能有哪些?~ 1-1 快速準確的計算步驟(程式設計、演算法) 1-2 方便處理的資料(文字檔、二進位檔案、非結構化資料、結構化資料、資料結構) 1-3 什麼是「好的程式」?(效率性) 1-4 比較演算法的基準(計算複雜度、Order、大O 符號) 1-5 認識程式語言的差異(程式語言、編譯器、直譯器、 JIT 編譯器) 1-6 好用的演算法都在這(函式庫) 1-7 演算法的權限(專利權、軟體專利、著作權、公開資源) 1-8 圖解演算法(流程圖) 1-9 用寫的計算演算法(長除法) 1-10 查找質數(質數、埃拉托斯特尼篩法) 1-11 找出共同最大因數(最大公因數、輾轉相除法) 1-12 益智遊戲引導學習演算法(河內塔) 1-13 使用隨機值的測試法(亂數、虛擬亂數、種子值、蒙特卡羅方法) 試試看 比較各個函數中的數值是如何增加的
第 2 章 檔案的保存方式 ~各個的結構與特徵~ 2-1 整數的表現方式(10 進位、2 進位、16 進位) 2-2 資料的單位(Bit、Byte) 2-3 小數的表現方式(小數、浮點數、實數) 2-4 字元的表現方式(字元、字元編碼、ASCII、雙位元組字元、亂碼) 2-5 命名特定的名稱位址(變數、賦值、常數) 2-6 保存資料的大小(型別、資料型別、型別轉換) 2-7 連續儲存空間(陣列、元素、索引) 2-5 讓人一看就懂的表示法(關聯陣列、字典、雜湊、對映、碰撞 2-9 存放資料的位置(位址、指標) 2-10 存放表格資料(二維陣列、多維陣列) 2-11 存放單字或文章(字串、NULL 字元) 2-12 結構複雜的資料型態(結構型別、列舉型別) 2-13 直線排列的結構(鏈結串列) 2-14 雙向連接的結構(雙向鏈結串列、環狀鏈結串列) 2-15 樹狀分支的保存結構(樹狀結構、二元樹、完全二元樹) 2-16 滿足條件的樹狀結構(堆積) 2-17 適用於搜尋的資料結構(二元搜尋樹、平衡樹) 2-18 平衡的樹狀結構(B 樹、B+ 樹、B* 樹) 2-19 儲存無序資料(集合) 2-20 取出最後儲存的資料(堆疊、LIFO、push(堆入)、pop(取出)) 2-21 按照先後順序取出的結構(佇列、FIFO、入列、出列) 2-22 虛擬記憶體的快取檔案置換機制(虛擬記憶體、快取檔案置換機制、LFU、LRU) 試試看 計算儲存資料所需的容量
第 3 章 重新排列資料順序 ~依照規則排列數值~ 3-1 升序或降序的排列(排序) 3-2 保證相同鍵值的順序(穩定排序、內部排序、外部排序) 3-3 選擇最大值和最小值排序(選擇排序) 3-4 將要排序的元素加入已排序陣列(插入排序) 3-5 與當前元素比較(氣泡排序) 3-6 雙向排序陣列元素(雞尾酒排序) 3-7 併用交換與插入提升效能(希爾排序) 3-8 堆積結構的排序(堆積排序) 3-9 比較多筆資料並進行合併(合併排序) 3-10 常用於快速重新排序的方法(快速排序、分治法) 3-11 取值範圍內有效(桶排序、Bin Sort、基數排序) 3-12 預留排序的空間(圖書館排序、跳躍鏈結串列) 3-13 會心一笑的排序方式(史達林排序、猴子排序) 3-14 該選用什麼方式?(如何比較排序法) 試試看 請試著繪製排序的流程圖
第 4 章 搜尋資料 ~如何快速尋找目標值?~ 4-1 從多筆資料當中找出吻合條件值(搜尋) 4-2 徹頭徹尾的搜尋方式(暴力法、窮舉法) 4-3 從頭依序搜尋(線性搜尋) 4-4 有序資料的搜尋方式(二分搜尋法) 4-5 按距離遠近的搜尋方式(廣度優先搜尋) 4-6 按左右相鄰的搜尋方式(深度優先搜尋、回溯法) 4-7 深入層級的搜尋方式(遞迴、遞迴呼叫、剪枝法) 4-8 搜尋樹狀結構的順序差異(前序走訪、中序走訪、後序走訪、波蘭表示法、逆波蘭表示法) 4-9 進行反向的搜尋方式(雙向搜尋) 4-10 改變起點和終點的搜尋方式(尺取法) 4-11 以邊長求解最短路徑的搜尋方式(最短路徑問題、貝爾曼-福特演算法) 4-12 以節點求解最短路徑的搜尋方式(戴克斯特拉演算法) 4-13 啟發式搜尋法(A* 演算法、歐幾里得距離、曼哈頓距離) 4-14 求出最大利益的方法(極小化極大演算法、Alpha-beta 剪枝法) 4-15 從文章中搜尋字串(暴力搜尋法、樸素演算法、KMP 演算法) 4-16 搜尋字串的小技巧(Boyer-Moore 演算法) 4-17 搜尋符合特定模式的字串(正規表達式) 試試看 我們熟悉的搜尋方法有哪些?
第 5 章 使用在機器學習上的運算法 ~實現 AI 的計算方式~ 5-1 從資料進行分類和預測(機器學習、統計式機器學習) 5-2 有正確解答的學習方式(監督式學習、過擬合) 5-3 從資料抓出特徵並分類的學習方式(非監督式學習、聚類分析) 5-4 獎勵最佳行為的學習方式(強化學習、行動、智能體、環境、狀態、多智能體系統) 5-5 以樹狀結構實現分類和迴歸(決策樹、基尼不純度、信息增益) 5-6 採多數表決的決策樹(隨機森林、集成學習、裝袋演算法、提升演算法) 5-7 分離邊界使間隔最大化(支持向量機、超平面、硬間隔、軟間隔) 5-8 用機率預測 0 到 1 的範圍(迴歸分析、最小平方法、邏輯迴歸分析) 5-9 模仿人腦結構量化訊息(神經網路、反向傳播法) 5-10 更深入的學習方式(深度學習、CNN、RNN) 5-11 生成假資料的 AI 技術(GAN、深偽技術) 5-12 去除影像雜訊和增強輪廓(影像濾波器、平滑化、邊緣檢測) 5-13 隨機抽樣的執行方式(隨機演算法、啟發式演算法) 5-14 模擬生物進化的過程(遺傳演算法) 5-15 隨時間經過改變隨機性(爬山演算法、模擬退火法) 5-16 強化學習鄰近的樣本(自組織映射圖) 5-17 快速求近似解的方法(牛頓法、梯度下降法、隨機梯度下降法) 5-18 分類大量資料(k 平均演算法、K-means++ 演算法) 5-19 降低資料的維度表示新的特徵(主成分分析) 試試看 我們熟悉的 AI 應用實例有哪些?
第 6 章 其他常見的演算法 ~活用於日常中的應用實例~ 6-1 分割成許多更小的問題(動態規劃、記憶化搜尋) 6-2 縮減資料容量(壓縮檔、解壓縮檔、展開檔案) 6-3 連續壓縮(變動長度編碼法、霍夫曼編碼法) 6-4 檢測輸入錯誤(校驗碼、同位元檢查碼) 6-5 去除雜訊和干擾(錯誤更正碼、漢明碼) 6-6 利用加密演算法提升安全性(加密、解密、密文、明文) 6-7 最簡單的加密與解密方法(凱薩密碼、ROT13) 6-8 對系統開銷小的加密方式(對稱式加密法、私密金鑰加密法、金鑰分配問題) 6-9 安全地共享金鑰(Diffie-Hellman 密鑰交換) 6-10 利用極大整數之質因數無法分解的特性(公開金鑰加密、 RSA 加密演算法) 6-11 用較短的密鑰長度確保安全性(橢圓曲線密碼學、安全威脅) 6-12 使用在社群網站的演算法(Facebook、Twitter、六度分隔理論) 6-13 Google 使用的演算法(網站排名演算法、RankBrain) 6-14 從未知數中做出決策(A/B 測試、吃角子老虎演算法) 6-15 訪問所有城市的最小路徑成本(旅行推銷員問題、工作排程問題) 6-16 放入物品的價值總和最大化(背包問題、0/1 背包問題) 6-17 無解的演算法(圖靈機、停機問題) 6-18 答對可贏得 100 萬美元?的超級難題(P 問題、NP 問題、P≠NP 問題、NP 困難、NP 完全) 試試看 如何計算今年的「開運方位」?
詞彙集 索引
|
|
|
|
|