Hello算法

Hello算法

《Hello算法》是2024年2月人民郵電出版社出版的圖書,作者是靳宇棟。

基本介紹

  • 中文名:Hello算法
  • 作者:靳宇棟
  • 語言:簡體中文
  • 出版時間:2024年2月
  • 出版社:人民郵電出版社
  • 頁數:380 頁
  • ISBN:9787115637505
  • 定價:129.8 元
  • 開本:16 開
  • 裝幀:平裝
內容簡介,讀者對象,作者簡介,目錄,

內容簡介

本書是備受廣大讀者推崇的數據結構與算法入門教程,已在 GitHub 獲得超 60k 的 Star,並多次登頂 GitHub Trending。主要特點有:
  • 動畫圖解:重點和難點知識通過動畫以圖解形式展示,內容清晰易懂、學習曲線平滑,引導初學者探索數據結構與算法的知識地圖。
  • 一鍵運行:原始碼可一鍵運行,幫助讀者在練習中提升編程技能,了解算法工作原理和數據結構底層實現。
  • 配套齊全:附贈原始碼、思維導圖和書籤。
書中系統介紹了數據結構與算法基礎、複雜度分析、數組與鍊表、棧與佇列、哈希表、樹、堆、圖、搜尋、排序、分治、回溯、動態規劃和貪心算法等核心知識,通過清晰易懂的解釋和豐富的代碼示例,以及生動形象的全彩插圖和線上動畫圖解,揭示算法工作原理和數據結構底層實現,教授讀者如何選擇和設計最優算法來解決不同類型的問題,切實提升編程技能,構建完整的數據結構與算法知識體系。

讀者對象

本書面向計算機相關專業的大學生和該領域的從業者,也適用於對算法感興趣、具有一定編程經驗的人士。

作者簡介

靳宇棟(@krahets),前華為高級算法工程師,上海交通大學碩士,西安交通大學本科,專注於3D重建與渲染、3D生成算法的研究。曾獲VEX機器人世界錦標賽冠軍、全球人工智慧創新大賽一等獎。喜歡在開源社區分享知識,作品的GitHub Star超60,000,訂閱人數超460,000。

目錄

前言
第 1 章 初識算法 1
1.1 算法無處不在 1
1.2 算法是什麼 5
1.2.1 算法定義 5
1.2.2 數據結構定義 5
1.2.3 數據結構與算法的關係 5
1.3 小結 7
第 2 章 複雜度分析 9
2.1 算法效率評估 9
2.1.1 實際測試 9
2.1.2 理論估算 10
2.2 疊代與遞歸 10
2.2.1 疊代 11
2.2.2 遞歸 13
2.2.3 兩者對比 18
2.3 時間複雜度 19
2.3.1 統計時間增長趨勢 20
2.3.2 函式漸近上界 21
2.3.3 推算方法 22
2.3.4 常見類型 23
2.3.5 最差、最佳、平均時間複雜度 30
2.4 空間複雜度 32
2.4.1 算法相關空間 32
2.4.2 推算方法 33
2.4.3 常見類型 34
2.4.4 權衡時間與空間 38
2.5 小結 39
第 3 章 數據結構 42
3.1 數據結構分類 42
3.1.1 邏輯結構:線性與非線性 42
3.1.2 物理結構:連續與分散 43
3.2 基本數據類型 45
3.3 數字編碼* 46
3.3.1 原碼、反碼和補碼 46
3.3.2 浮點數編碼 49
3.4 字元編碼* 50
3.4.1 ASCII字元集 50
3.4.2 GBK字元集 51
3.4.3 Unicode字元集 51
3.4.4 UTF-8編碼 53
3.4.5 程式語言的字元編碼 54
3.5 小結 55
第 4 章 數組與鍊表 58
4.1 數組 58
4.1.1 數組常用操作 58
4.1.2 數組的優點與局限性 62
4.1.3 數組典型套用 63
4.2 鍊表 63
4.2.1 鍊表常用操作 64
4.2.2 數組與鍊表對比 67
4.2.3 常見鍊表類型 67
4.2.4 鍊表典型套用 68
4.3 列表 69
4.3.1 列表常用操作 69
4.3.2 列表實現 71
4.4 記憶體與快取* 73
4.4.1 計算機存儲設備 73
4.4.2 數據結構的記憶體效率 75
4.4.3 數據結構的快取效率 75
4.5 小結 76
第 5 章 棧與佇列 81
5.1 棧 81
5.1.1 棧的常用操作 81
5.1.2 棧的實現 82
5.1.3 兩種實現對比 86
5.1.4 棧的典型套用 87
5.2 佇列 87
5.2.1 佇列常用操作 88
5.2.2 佇列實現 89
5.2.3 佇列典型套用 94
5.3 雙向佇列 95
5.3.1 雙向佇列常用操作 95
5.3.2 雙向佇列實現* 96
5.3.3 雙向佇列套用 104
5.4 小結 104
第 6 章 哈希表 107
6.1 哈希表 107
6.1.1 哈希表常用操作 108
6.1.2 哈希表簡單實現 109
6.1.3 哈希衝突與擴容 111
6.2 哈希衝突 113
6.2.1 鏈式地址 113
6.2.2 開放定址 116
6.2.3 程式語言的選擇 120
6.3 哈希算法 120
6.3.1 哈希算法的目標 121
6.3.2 哈希算法的設計 122
6.3.3 常見哈希算法 124
6.3.4 數據結構的哈希值 124
6.4 小結 125
第 7 章 樹 129
7.1 二叉樹 129
7.1.1 二叉樹常見術語 129
7.1.2 二叉樹基本操作 131
7.1.3 常見二叉樹類型 132
7.1.4 二叉樹的退化 134
7.2 二叉樹遍歷 135
7.2.1 層序遍歷 135
7.2.2 前序、中序、後序遍歷 136
7.3 二叉樹數組表示 138
7.3.1 表示 perfect 二叉樹 138
7.3.2 表示任意二叉樹 139
7.3.3 優點與局限性 142
7.4 二叉搜尋樹 142
7.4.1 二叉搜尋樹的操作 143
7.4.2 二叉搜尋樹的效率 151
7.4.3 二叉搜尋樹常見套用 151
7.5 AVL樹* 152
7.5.1 AVL樹常見術語 153
7.5.2 AVL樹旋轉 154
7.5.3 AVL樹常用操作 160
7.5.4 AVL樹典型套用 161
7.6 小結 162
第 8 章 堆 165
8.1 堆 165
8.1.1 堆的常用操作 166
8.1.2 堆的實現 167
8.1.3 堆的常見套用 177
8.2 建堆操作 177
8.2.1 藉助入堆操作實現 177
8.2.2 通過遍歷堆化實現 178
8.2.3 複雜度分析 178
8.3 Top-k問題 180
8.3.1 方法一:遍歷選擇 180
8.3.2 方法二:排序 180
8.3.3 方法三:堆 181
8.4 小結 182
第 9 章 圖 184
9.1 圖 184
9.1.1 圖的常見類型與術語 185
9.1.2 圖的表示 186
9.1.3 圖的常見套用 188
9.2 圖的基礎操作 188
9.2.1 基於鄰接矩陣的實現 188
9.2.2 基於鄰接表的實現 192
9.2.3 效率對比 196
9.3 圖的遍歷 196
9.3.1 廣度優先遍歷 196
9.3.2 深度優先遍歷 198
9.4 小結 200
第 10 章 搜尋 203
10.1 二分查找 203
10.1.1 區間表示方法 207
10.1.2 優點與局限性 208
10.2 二分查找插入點 209
10.2.1 無重複元素的情況 209
10.2.2 存在重複元素的情況 210
10.3 二分查找邊界 212
10.3.1 查找左邊界 212
10.3.2 查找右邊界 212
10.4 哈希最佳化策略 214
10.4.1 線性查找:以時間換空間 214
10.4.2 哈希查找:以空間換時間 215
10.5 重識搜尋算法 217
10.5.1 暴力搜尋 217
10.5.2 自適應搜尋 218
10.5.3 搜尋方法選取 218
10.6 小結 220
第 11 章 排序 222
11.1 排序算法 222
11.1.1 評價維度 222
11.1.2 理想排序算法 223
11.2 選擇排序 224
11.3 冒泡排序 229
11.3.1 算法流程 231
11.3.2 效率最佳化 232
11.3.3 算法特性 233
11.4 插入排序 233
11.4.1 算法流程 234
11.4.2 算法特性 235
11.4.3 插入排序的優勢 235
11.5 快速排序 235
11.5.1 算法流程 239
11.5.2 算法特性 240
11.5.3 快速排序為什麼快 240
11.5.4 基準數最佳化 241
11.5.5 尾遞歸最佳化 242
11.6 歸併排序 242
11.6.1 算法流程 243
11.6.2 算法特性 248
11.6.3 鍊表排序 248
11.7 堆排序 249
11.7.1 算法流程 249
11.7.2 算法特性 250
11.8 桶排序 250
11.8.1 算法流程 251
11.8.2 算法特性 252
11.8.3 如何實現平均分配 252
11.9 計數排序 253
11.9.1 簡單實現 254
11.9.2 完整實現 255
11.9.3 算法特性 256
11.9.4 局限性 256
11.10 基數排序 257
11.10.1 算法流程 257
11.10.2 算法特性 259
11.11 小結 259
第 12 章 分治 263
12.1 分治算法 263
12.1.1 如何判斷分治問題 264
12.1.2 通過分治提升效率 264
12.1.3 分治常見套用 266
12.2 分治搜尋策略 267
12.3 構建二叉樹問題 269
12.4 漢諾塔問題 273
12.5 小結 280
第 13 章 回溯 282
13.1 回溯算法 282
13.1.1 嘗試與回退 283
13.1.2 剪枝 288
13.1.3 框架代碼 289
13.1.4 常用術語 291
13.1.5 優點與局限性 291
13.1.6 回溯典型例題 292
13.2 全排列問題 292
13.2.1 無相等元素的情況 293
13.2.2 考慮相等元素的情況 295
13.3 子集和問題 298
13.3.1 無重複元素的情況 298
13.3.2 考慮重複元素的情況 302
13.4 n 皇后問題 304
13.5 小結 308
第 14 章 動態規劃 310
14.1 初探動態規劃 310
14.1.1 方法一:暴力搜尋 311
14.1.2 方法二:記憶化搜尋 313
14.1.3 方法三:動態規劃 314
14.1.4 空間最佳化 316
14.2 動態規劃問題特性 316
14.2.1 最優子結構 316
14.2.2 無後效性 319
14.3 動態規劃解題思路 321
14.3.1 問題判斷 321
14.3.2 問題求解步驟 322
14.4 0-1 背包問題 332
14.5 完全背包問題 343
14.5.1 完全背包問題 344
14.5.2 零錢兌換問題 I348
14.5.3 零錢兌換問題II 350
14.6 編輯距離問題 352
14.7 小結 356
第 15 章 貪心 359
15.1 貪心算法 359
15.1.1 貪心算法的優點與局限性 360
15.1.2 貪心算法特性 361
15.1.3 貪心算法解題步驟 362
15.1.4 貪心算法典型例題 363
15.2 分數背包問題 363
15.3 最大容量問題 366
15.4 最大切分乘積問題 373
15.5 小結 377
附錄 A 術語表 379

相關詞條

熱門詞條

聯絡我們