算法學習與應用從入門到精通

張玲玲

  • 出版商: 人民郵電
  • 出版日期: 2024-07-01
  • 定價: $414
  • 售價: 8.5$352
  • 語言: 簡體中文
  • 頁數: 489
  • 裝訂: 平裝
  • ISBN: 7115418853
  • ISBN-13: 9787115418852
  • 下單後立即進貨 (約4週~6週)

  • 算法學習與應用從入門到精通-preview-1
  • 算法學習與應用從入門到精通-preview-2
算法學習與應用從入門到精通-preview-1

商品描述

算法是程序的靈魂,只有掌握了算法,才能輕松地駕馭程序開發。算法能夠告訴開 發者在面對一個項目功能時用什麽思路去實現,有了這個思路後,編程工作只需遵循這個思路去實現即可。本書循序漸進、由淺入深地詳細講解了算法實現的核心技術,並通過具體實例的實現過程演練了各個知識點的具體使用流程。

全書共20章,其中,第 1章講解了算法為什麽是程序的靈魂;第 2~8章分別講解了常用的算法,如線性表、隊列和棧,樹,圖,查找算法,內部排序算法,外部排序算法等知識,這些內容都是算法技術核心的語法知識;第9~15章分別講解了經典的數據結構問題、解決數學問題、解決趣味問題、解決圖像問題、算法的經典問題、解決奧賽問題、常見算法應用實踐等高 級編程技術,這些內容是算法技術的重點和難點;第 16~20章分別通過5個綜合實例的實現過程,介紹了算法在綜合開發項目中的使用流程和發揮的作用。全書內容以“技術解惑”和“實踐應用”貫穿全書,引 領讀者全面掌握算法的核心技術。

本書不但適合算法研究和學習的初學者,也適合有一定算法基礎的讀者,還可以作為大中專院校相關專業師生的學慣用書和培訓學校的教材。

作者簡介

计算机硕士,杰出程序员和算法专家,在算法研究和应用上很有心得,曾经开发过众多的游戏应用、系统软件的。业余期间,曾经在国内主流期刊中发表过多篇算法领域的杰出论文。

目錄大綱

目錄

 

第 1章 算法是程序的靈魂 1

(視頻總計18分鐘,技術解惑1個)

1.1 算法的基礎 2

1.1.1 算法的特徵 2

1.1.2 何為算法 2

1.2 電腦中的算法 3

1.2.1 認識電腦中的算法 3

1.2.2 為什麽說算法是程序的

靈魂 4

1.3 在電腦中表示算法的方法 4

1.3.1 用流程圖來表示算法 4

1.3.2 用N-S流程圖來表示算法 6

1.3.3 用電腦語言表示算法 6

1.4 技術解惑 6

第 2章 常用的算法思想 8

(視頻總計51分鐘,實例15個,技術解惑8個)

2.1 枚舉算法思想 9

2.1.1 枚舉算法基礎 9

2.1.2 實戰演練—百錢買百雞 9

2.1.3 實戰演練—解決

“填寫運算符”問題 10

2.2 遞推算法思想 12

2.2.1 遞推算法基礎 12

2.2.2 實踐演練—解決

“斐波那契數列”問題 12

2.2.3 實踐演練—解決

“銀行存款”問題 14

2.3 遞歸算法思想 15

2.3.1 遞歸算法基礎 15

2.3.2 實踐演練—解決“漢諾塔”

問題 16

2.3.3 實踐演練—解決“階乘”

問題 18

2.4 分治算法思想 19

2.4.1 分治算法基礎 19

2.4.2 實踐演練—解決

“大數相乘”問題 19

2.4.3 實踐演練—歐洲冠 軍杯

比賽日程安排 21

2.5 貪心算法思想 23

2.5.1 貪心算法基礎 23

2.5.2 實踐演練—解決“裝箱”

問題 24

2.5.3 實踐演練—解決

“找零方案”問題 26

2.6 試探法算法思想 27

2.6.1 試探法算法基礎 27

2.6.2 實踐演練—解決

“八皇後”問題 28

2.6.3 實踐演練—體彩29選

7彩票組合 29

2.7 迭代算法 30

2.7.1 迭代算法基礎 30

2.7.2 實踐演練—解決

“求平方根”問題 31

2.8 模擬算法思想 32

2.8.1 模擬算法的思路 32

2.8.2 實踐演練—解決

“猜數字游戲”問題 32

2.8.3 實踐演練—解決

“擲骰子游戲”問題 33

2.9 技術解惑 34

2.9.1 衡量算法的標準是什麽 34

2.9.2 在什麽時候選擇使用

枚舉法 36

2.9.3 遞推和遞歸有什麽差異 36

2.9.4 總結分治法能解決什麽

類型的問題 37

2.9.5 分治算法的機理是什麽 37

2.9.6 為什麽說貪婪算法並不是**

優解決問題的方案 37

2.9.7 回溯算法會影響算法

效率嗎 38

2.9.8 遞歸算法與迭代算法

有什麽區別 38

第3章 線性表、隊列和棧 39

(視頻總計35分鐘,實例9個,技術解惑5個)

3.1 線性表詳解 40

3.1.1 線性表的特性 40

3.1.2 順序表操作 41

3.1.3 實踐演練—順序表操作

函數 44

3.1.4 實踐演練—操作順

序表 45

3.1.5 鏈表操作 48

3.1.6 實踐演練—定義鏈表操作

函數 51

3.1.7 實踐演練—操作鏈表 52

3.2 先進先出的隊列詳解 53

3.2.1 什麽是隊列 54

3.2.2 鏈隊列和循環隊列 55

3.2.3 隊列的基本操作 55

3.2.4 隊列的鏈式存儲 55

3.2.5 實踐演練—完整的順序

隊列的操作 56

3.2.6 實踐演練—完整的循環

隊列的操作 57

3.2.7 實踐演練—實現一個

排號程序 59

3.3 後進先出棧 60

3.3.1 什麽是棧 61

3.3.2 棧的基本分類 61

3.3.3 實踐演練—棧操作

函數 63

3.3.4 實踐演練—測試棧

操作 64

3.4 技術解惑 65

3.4.1 線性表插入操作的時間

復雜度是多少 65

3.4.2 線性表刪除操作的時間

復雜度是多少 65

3.4.3 線性表按值查找操作的

時間復雜度是多少 66

3.4.4 線性表鏈接存儲(單鏈表)

操作的11種算法是什麽 66

3.4.5 堆和棧的區別是什麽 70

第4章 樹 71

(視頻總計35分鐘,實例9個,技術解惑5個)

4.1 樹基礎 72

4.1.1 什麽是樹 72

4.1.2 樹的相關概念 72

4.2 二叉樹詳解 73

4.2.1 二叉樹的定義 73

4.2.2 二叉樹的性質 74

4.2.3 二叉樹存儲 75

4.2.4 操作二叉樹 77

4.2.5 遍歷二叉樹 79

4.2.6 線索二叉樹 82

4.2.7 實踐演練—測試二叉樹

操作函數 85

4.2.8 實踐演練—C++的二叉樹

操作 87

4.2.9 實踐演練—實現各種線索

二叉樹的操作 89

4.2.10 實踐演練—測試線索

二叉樹的操作 91

4.3 霍夫曼樹 92

4.3.1 霍夫曼樹基礎 93

4.3.2 實踐演練—實現各種

霍夫曼樹操作 95

4.3.3 實踐演練—測試霍夫曼樹

的操作 97

4.3.4 總結霍夫曼編碼的算法

實現 98

4.4 技術解惑 100

4.4.1 樹和二叉樹的差別是

什麽 100

4.4.2 二叉樹和鏈表的效率誰

更牛 100

4.4.3 如何打印二叉樹中的

所有路徑 100

第5章 圖 101

(視頻總計40分鐘,實例8個,技術解惑4個)

5.1 圖的起源 102

5.2 圖的相關概念 103

5.3 存儲結構 105

5.3.1 表示頂點之間相鄰關系的

鄰接矩陣 106

5.3.2 鄰接表 107

5.3.3 十字鏈表 108

5.3.4 實踐演練—創建一個鄰接

矩陣 109

5.3.5 實踐演練—測試霍夫曼樹

的操作 111

5.4 圖的遍歷 112

5.4.1 深度優先搜索 113

5.4.2 廣度優先搜索 114

5.4.3 實踐演練—求一條包含

圖中所有頂點的簡單

路徑 117

5.4.4 實踐演練—求距v0的

各頂點中**短路徑長度

**長的一個頂點 118

5.4.5 實踐演練—實現圖的

遍歷操作方法 118

5.4.6 實踐演練—實現圖的

遍歷操作 120

5.5 圖的連通性 120

5.5.1 無向圖連通分量 121

5.5.2 **小生成樹 121

5.5.3 實踐演練—創建一個**小

生成樹 123

5.5.4 實踐演練—調用**小生成

樹函數實現操作 123

5.5.5 關鍵路徑 124

5.6 尋求**短路徑 128

5.6.1 求某一頂點到其他各頂點的

**短路徑 128

5.6.2 任意一對頂點間的

**短路 129

5.6.3 實踐演練—創建**短路徑

算法函數 131

5.6.4 實踐演練—調用**短路徑

算法實現測試 132

5.7 技術解惑 132

5.7.1 幾種**短路徑算法的

比較 132

5.7.2 鄰接矩陣與鄰接表的

對比 134

5.7.3 如何表示有向圖的十字鏈表

存儲 135

5.7.4 比較深度優先算法和廣度

優先算法 135

第6章 查找算法 136

(視頻總計37分鐘,實例8個,技術解惑3個)

6.1 幾個相關概念 137

6.2 基於線性表的查找法 137

6.2.1 順序查找法 137

6.2.2 實踐演練—實現順序查找

算法 138

6.2.3 實踐演練—改進的順序

查找算法 139

6.2.4 折半查找法 140

6.2.5 實踐演練—使用折半查找

算法查找數據 140

6.2.6 實踐演練—查找10個已

排好序的數 141

6.2.7 分塊查找法 142

6.3 基於樹的查找法 143

6.3.1 二叉排序樹 143

6.3.2 實踐演練—將數據插入到

二叉樹節點中 147

6.3.3 實踐演練—刪除二叉樹中

一個節點 148

6.3.4 平衡二叉排序樹 150

6.4 哈希法 155

6.4.1 哈希法的基本思想 155

6.4.2 構造哈希函數 155

6.4.3 處理沖突 156

6.4.4 哈希表的查找過程 157

6.5 索引查找 158

6.5.1 索引查找的過程 158

6.5.2 實踐演練—索引查找法

查找指定的關鍵字 158

6.5.3 實踐演練—實現索引查找並插入一個新關鍵字 160

6.6 技術解惑 161

6.6.1 分析查找算法的性能 161

6.6.2 演示對二叉樹的完整

操作 162

6.6.3 分析哈希法的性能 164

第7章 內部排序算法 166

(視頻總計39分鐘,實例10個,技術解惑6個)

7.1 排序基礎 167

7.1.1 排序的目的和過程 167

7.1.2 內部排序與外部排序 167

7.1.3 穩定排序與不穩定排序 167

7.2 插入排序算法 168

7.2.1 直接插入排序 168

7.2.2 實踐演練—編寫直接插入

排序算法 169

7.2.3 實踐演練—插入排序算法

對數據進行排序處理 169

7.2.4 折半插入排序 170

7.2.5 表插入排序 170

7.2.6 希爾排序 171

7.2.7 實踐演練—使用希爾排序

算法對數據進行排序

處理 172

7.2.8 實踐演練—使用希爾排序

處理數組 173

7.3 交換類排序法 174

7.3.1 冒泡排序(相鄰比序法) 174

7.3.2 快速排序 174

7.3.3 實踐演練—用冒泡排序

算法實現對數據的排序

處理 175

7.3.4 實踐演練—使用快速排序

算法 177

7.4 選擇類排序法 178

7.4.1 直接選擇排序 178

7.4.2 樹形選擇排序 179

7.4.3 堆排序 179

7.4.4 實踐演練—直接選擇排序

算法對數據的排序處理 181

7.4.5 實踐演練—堆排序算法

實現排序處理 182

7.5 歸並排序 183

7.5.1 歸並排序思想 183

7.5.2 兩路歸並算法的思路 184

7.5.3 實現歸並排序 185

7.5.4 實踐演練—用歸並算法

實現排序處理 186

7.5.5 實踐演練—使用歸並排序

算法求逆序對 188

7.6 基數排序 189

7.6.1 多關鍵字排序 189

7.6.2 鏈式基數排序 189

7.7 技術解惑 192

7.7.1 插入排序算法的描述是

什麽 192

7.7.2 希爾排序和插入排序誰

更快 192

7.7.3 快速排序的時間耗費是

多少 192

7.7.4 堆排序與直接選擇排序的

區別是什麽 193

7.7.5 歸並排序的效率如何,應該

如何選擇 193

7.7.6 綜合比較各種排序方法 193

第8章 外部排序算法 195

(視頻總計32分鐘)

8.1 外部信息概覽 196

8.1.1 磁帶存儲器 196

8.1.2 磁盤存儲器 197

8.2 外部排序的基本方法 198

8.2.1 磁盤排序 198

8.2.2 磁帶排序 201

8.3 文件的基礎知識 204

8.4 文件組織方式 205

8.4.1 順序文件 205

8.4.2 索引文件 205

8.4.3 ISAM文件 206

8.4.4 VSAM文件 207

8.4.5 散列文件 209

8.4.6 多關鍵字文件 209

第9章 經典的數據結構問題 211

(視頻總計31分鐘,實例5個)

9.1 約瑟夫環 212

9.2 大整數運算 214

9.2.1 數組實現大整數運算 214

9.2.2 鏈表實現大整數運算 220

9.3 電腦進制轉換 224

9.4 中序表達式轉換為後序表達式 227

第 10章 解決數學問題 231

(視頻總計36分鐘,實例12個)

10.1 **大公約數和**小公倍數 232

10.2 哥德巴赫猜想 233

10.3 完全數 235

10.4 親密數 237

10.5 自守數 238

10.6 方程求解 239

10.6.1 用高斯消元法解方程組 239

10.6.2 用二分法解非線性

方程 242

10.6.3 用牛頓迭代法解非線性

方程 243

10.7 矩陣運算 244

10.8 實現n×n整數方陣的轉置 246

10.9 一元多項式運算 247

10.9.1 一元多項式的加法運算 247

10.9.2 一元多項式的減法

運算 250

第 11章 解決趣味問題 257

(視頻總計43分鐘,實例16個)

11.1 歌星大獎賽 258

11.2 借書方案 258

11.3 打魚還是曬網 259

11.4 捕魚和分魚 260

11.5 出售金魚 261

11.6 平分七筐魚 262

11.7 繩子的長度和井深 263

11.8 雞兔同籠 264

11.9 漢諾塔 265

11.9.1 遞歸法 266

11.9.2 非遞歸法 267

11.10 馬踏棋盤 268

11.10.1 使用循環查找法 269

11.10.2 使用遞歸法 271

11.10.3 使用棧方法 272

11.11 三色球問題 275

11.12 新郎和新娘問題 276

11.13 計算年齡 278

第 12章 解決圖像問題 279

(視頻總計31分鐘,實例6個)

12.1 “八皇後”問題 280

12.1.1 使用遞歸法 280

12.1.2 使用循環法 282

12.2 生命游戲 284

12.3 黑白棋問題 287

12.4 “騎士迷宮”問題 293

12.5 找出迷宮問題中的所有路徑 298

第 13章 算法的經典問題 300

(視頻總計36分鐘,實例8個)

13.1 存錢利息**大化 301

13.2 背包問題 303

13.2.1 使用動態規劃法 303

13.2.2 使用遞歸法 307

13.3 農夫過河 309

13.4 三色旗問題 311

13.5 取石子 313

13.6 停車場管理 316

13.7 約瑟夫生死者游戲 323

第 14章 解決奧賽問題 325

(視頻總計55分鐘,實例7個)

14.1 孿生素數問題 326

14.2 百錢買百雞問題 327

14.3 馬克思手稿中的數學題 328

14.4 正整數分解質因數 329

14.5 水仙花數 330

14.6 素數 330

14.6.1 求1000以內的所有

素數 331

14.6.2 求1000以內的迴文

素數 332

14.6.3 求1000以內的平方回

文數 333

14.7 階乘 333

14.7.1 使用遞歸法 334

14.7.2 實現大數的階乘 335

14.8 青蛙過河 339

14.9 過河卒 342

14.10 素數組合 344

14.11 校驗碼問題 346

14.12 老師排座位 347

14.13 模擬立體圖 349

14.14 採藥問題 351

14.15 等價表達式問題 352

14.16 購買年貨問題 355

第 15章 常見算法應用實踐 358

(視頻總計26分鐘,實例7個)

15.1 實現Ping功能中的校驗和

算法 359

15.2 24點游戲算法 363

15.3 洗牌 368

15.4 21點游戲 370

15.5 2048游戲 375

15.6 引用計數算法 386

15.7 貓捉老鼠游戲 388

第 16章 俄羅斯方塊游戲 393

(視頻總計42分鐘,綜合實例1個)

16.1 游戲功能描述 394

16.2 游戲總體設計 394

16.2.1 功能模塊設計 394

16.2.2 數據結構設計 396

16.2.3 構成函數介紹 397

16.3 游戲具體實現 398

16.3.1 預處理 398

16.3.2 主函數—遞歸算法 400

16.3.3 初始化界面處理—

分治算法 401

16.3.4 時鐘中斷處理 402

16.3.5 成績、速度和幫助

處理 403

16.3.6 滿行處理—碰撞檢

測算法 403

16.3.7 方塊顯示和消除處理—

分治算法 405

16.3.8 游戲方塊操作判斷

處理—枚舉算法 406

第 17章 學生成績管理系統 409

(視頻總計36分鐘,綜合實例1個)

17.1 系統總體描述 410

17.1.1 開發目標和項目背景

介紹 410

17.1.2 系統功能模塊 410

17.2 系統總體設計 411

17.2.1 功能模塊設計 411

17.2.2 數據結構設計 413

17.2.3 構成函數介紹 413

17.3 系統具體實現 415

17.3.1 預處理 415

17.3.2 主函數main—

遞歸算法 415

17.3.3 系統主菜單函數—

模擬算法 416

17.3.4 表格顯示信息 417

17.3.5 信息查找定位—

分治算法 417

17.3.6 格式化輸入數據—

遞歸、分治算法 418

17.3.7 增加學生記錄—

試探算法 418

17.3.8 查詢學生記錄—

分治算法 419

17.3.9 刪除學生記錄—分治、

遞歸算法 420

17.3.10 修改學生記錄—遞歸、

 模擬算法 421

17.3.11 插入學生記錄—

 遞推算法 421

17.3.12 統計學生記錄—

 分治算法 423

17.3.13 排序處理—插入排序

 算法 423

17.3.14 存儲學生信息 424

第 18章 繪圖板系統 428

(視頻總計42分鐘,綜合實例1個)

18.1 項目規劃分析 429

18.1.1 繪圖板的核心技術 429

18.1.2 功能描述 429

18.1.3 總體設計 429

18.2 設計數據結構 430

18.2.1 設計數據結構 430

18.2.2 規劃系統函數 430

18.3 具體編碼 432

18.3.1 預處理模塊 432

18.3.2 功能控制模塊—遞推、

遞歸算法 434

18.3.3 保存加載模塊—

遞歸算法 435

18.3.4 鼠標控制模塊—枚舉、

遞歸算法 436

18.3.5 圖形繪制模塊—遞歸、

分治、枚舉、遞推

算法 437

18.3.6 主函數模塊—模擬、

遞歸算法 447

18.4 項目調試 451

第 19章 UDP傳輸系統 452

(視頻總計45分鐘,綜合實例1個)

19.1 項目規劃分析 453

19.1.1 功能描述 453

19.1.2 功能模塊設計 453

19.1.3 系統流程圖 454

19.1.4 廣播消息發送流程 454

19.1.5 廣播消息接收流程圖 455

19.1.6 多播消息接收流程圖 456

19.2 設計數據結構 457

19.2.1 定義常量 457

19.2.2 定義全局變量 458

19.3 規劃系統函數 458

19.4 具體編碼 459

19.4.1 預處理 460

19.4.2 初始化模塊處理 460

19.4.3 獲取參數—

枚舉算法 461

19.4.4 用戶幫助模塊—

遞歸算法 462

19.4.5 廣播信息發送模塊—

試探算法 463

19.4.6 廣播信息接收模塊—

試探算法 464

19.4.7 多播功能控制模塊—

試探算法 465

19.4.8 多播消息發送模塊—

試探算法 466

19.4.9 多播消息接收模塊—

試探算法 467

19.4.10 主函數—遞歸

算法 467

19.5 項目調試 468

第 20章 推箱子游戲 469

(視頻總計43分鐘,綜合實例1個)

20.1 項目規劃分析 470

20.1.1 功能描述 470

20.1.2 功能模塊分析 470

20.1.3 剖析執行流程 470

20.2 設計數據結構 472

20.3 規劃系統函數 472

20.4 具體編碼 475

20.4.1 預處理 475

20.4.2 初始化模塊—

遞歸算法 475

20.4.3 畫圖模塊—

試探算法 478

20.4.4 移動箱子模塊—試探、

分治、遞歸、枚舉算法 479

20.4.5 移動小人模塊—枚舉、

試探算法 482

20.4.6 功能控制模塊—遞歸、

分治算法 486

20.4.7 系統主函數—枚舉、

模擬、遞歸、試探算法 487

20.5 項目調試 488