內容大鋼
許多人聽到「演算法」這個詞,就覺得它很難懂,需要專業的編程知識才能明白。然而,演算法只是一個計算的「步驟」,不需要電腦和編程語言基礎。
本書介紹了演算法的基礎知識,數據的儲存、分類、查找方法,以及機器學習中使用的演算法等,由淺入深,圖文配套,並結合使用場景和案例進行細緻講解,初學者讀起來也毫無壓力。
除了按順序閱讀,獲取系統的知識,讀者還可以從目錄中挑選感興趣的主題和關鍵詞,按照自己的需求閱讀,是一本實用性滿分的演算法入門書。
作者介紹
(日)增井敏克|責編:何英嬌|譯者:潘詠雪
增井敏克,1979年生於奈良,畢業於大阪府立大學研究生院。增井IT工程師事務所代表、註冊工程師(信息工程學方向)。從事旨在「將商務、數學和IT結合以正確、高效使用電腦」的技能提升指導、軟體開發以及信息安全咨詢等工作。掌握C/C++、C#、Java、PHP和Ruby等20多種編程語言。著作有《在家就能學會的安全基礎》等。目前在面向IT工程師提供業務技能評估服務的平台CodeIQ上負責人氣欄目「每周演算法」的出題和評審工作。
目錄
第1章 演算法基礎知識?演算法的作用是什麼??
1-1 進行快速準確運算的步驟
編程、演算法
1-2 讓數據更容易處理
文本文件、二進位文件、非結構化數據、結構化數據、數據結構
1-3 什麼是好的電腦程序
使用效率
1-4 比較各種演算法的標準
計算複雜性、漸進、漸進符號
1-5 差異取決於實施的語言
編程語言、編譯器、解釋器、即時編譯
1-6 一套便捷的演算法集合
庫
1-7 演算法權利
專利權、軟體專利、著作權、開放源代碼
1-8 使用圖片講解演算法
流程圖
1-9 紙上計算的演算法
筆算
1-10 尋找素數
素數、埃拉托斯特尼篩法
1-11 找出最大公約數
最大公約數、歐幾里得演算法
1-12 通過拼圖學習演算法
漢諾塔問題
1-13 使用隨機值進行檢查
隨機數、偽隨機數、隨機種子、蒙特卡羅方法
第2章 如何存儲數據??它們各自的結構和特點?
2-1 整數是如何表示的
十進位、二進位、十六進位
2-2 數據的單位
比特、位元組
2-3 小數是如何表示的?
小數、浮點數、實數類型
2-4 字元表示
字元、字元代碼、ASCII、2位元組字元、亂碼字元
2-5 一個接一個地分配
變數、賦值、常量
2-6 要存儲的數據大小
數據類型、整數類型、數據類型轉換
2-7 在連續的區域內存儲
數組、元素、索引
2-8 以人們容易理解的方式表示
關聯數組、字典、散列表、地圖、碰撞
2-9 存儲數據的位置
地址、指針
2-10 以表格形式存儲數據
二維數組、多維數組
2-11 存儲單詞和句子
字元串、空字元
2-12 表達複雜的數據結構
結構體、枚舉類型
2-13 排成一排的形式
鏈表
2-14 雙向鏈接的形式
雙向鏈表、循環鏈表
2-15 存儲在一個分支結構中
樹狀結構、二叉樹、完整二叉樹
2-16 滿足條件的樹狀結構
堆
2-17 適合搜索演算法的數據結構
二叉搜索樹、平衡樹
2-18 平衡樹的類型
B樹、B+樹、B*樹
2-19 存儲無序的數據
集合
2-20 從最後的存儲中檢索
堆棧、LIFO、推入、彈出
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 當可能的值有限制時很有用的排序方法
桶排序、箱排序、基數排序
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 以一種巧妙的方式搜索字元串
BM演算法
4-17 搜索符合特定模式
正則表達式
第5章 機器學習中使用的演算法?支持人工智慧的計算方法?
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 能夠生成不存在數據的人工智慧
GAN、深度偽造
5-12 圖像去噪和邊界增強
圖像過濾、平滑、邊緣檢測
5-13 處理和執行過程中的隨機選擇
隨機選擇演算法、啟髮式演算法
5-14 模仿生物進化
遺傳演算法
5-15 隨著時間的推移改變隨機性
爬山演算法、模擬退火演算法
5-16 對附近的物體有很強的學習能力
自組織映射
5-17 快速求導近似解
牛頓法、梯度下降法、隨機梯度下降法
5-18 對大量的數據進行分類
k均值演算法
5-19 數據的維度被縮小,並在新的指標中表達
主成分分析
第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 用於社交媒體的演算法