《常用算法深入學習實錄(含DVD光碟1張)》是2013年10月電子工業出版社出版的圖書,作者是張子言。
基本介紹
- 書名:常用算法深入學習實錄(含DVD光碟1張)
- 作者:張子言 等
- ISBN:9787121213236
- 頁數:516
- 出版社:電子工業出版社
- 出版時間:2013年10月
- 開本:16(188*260)
- 版次:01-01
內容簡介,圖書目錄,
內容簡介
對於任何一門程式語言來說,算法都是程式的“靈魂”。正是因為算法如此重要,所以筆者精心編寫了本書,希望通過書中的內容引領廣大讀者一起探討學習算法的奧秘,帶領廣大讀者真正步入程式開發的高級世界。 本書共分15章,循序漸進、由淺入深地詳細講解算法的核心內容,並通過具體實例的實現過程演練各個知識點的具體用法。本書首先詳細講解算法的基礎知識,剖析了將算法稱為“程式靈魂”的原因。然後詳細講解算法技術的核心內容,主要包括八大算法思想、數據結構、樹、圖、查找、內部排序、外部排序和檔案等知識點的具體用法。接下來通過具體實例詳細講解各種算法經典問題的解決方案,主要包括解決經典的數據結構問題、解決數學問題、解決趣味問題、解決圖像問題和解決奧賽問題的具體方案等。另外,書中還講解了算法技術在現實編程項目中的作用和具體用法。
圖書目錄
第1章 都說算法是程式的“靈魂”1
1.1 開始學習算法1
1.1.1 算法的特徵和發展由來1
1.1.2 何為算法2
1.2 計算機中的算法3
1.2.1 認識計算機中的算法3
1.2.2 為什麼是程式的“靈魂”4
1.3 表示算法的方法4
1.3.1 用流程圖來表示算法5
1.3.2 用N-S流程圖來表示算法6
1.3.3 用計算機語言表示算法7
1.4 學好算法的秘訣8
第2章 分析妙趣橫生的算法思想9
2.1 八大算法思想9
2.2 比較“笨”的枚舉算法思想9
2.2.1 枚舉算法基礎10
2.2.2 實踐演練10
2.3 聰明一點的遞推算法思想15
2.3.1 遞推算法基礎15
2.3.2 實踐演練15
2.4 充分利用自己的遞歸算法思想18
2.4.1 遞歸算法基礎18
2.4.2 實踐演練18
2.5 各個擊破的分治算法思想22
2.5.1 分治算法基礎23
2.5.2 實踐演練23
2.6 貪心算法思想並不貪婪29
2.6.1 貪心算法基礎29
2.6.2 實踐演練30
2.7 試探法算法思想是一種委婉的做法35
2.7.1 試探法算法基礎35
2.7.2 實踐演練36
2.8 疊代算法39
2.8.1 疊代算法基礎40
2.8.2 實踐演練40
2.9 模擬算法思想42
2.9.1 模擬算法的思路42
2.9.2 實踐演練42
第3章 走在算法的路上之——分析簡單的
數據結構47
3.1 學習編程的注意事項47
3.2 什麼是線性表47
3.2.1 線性表的特性48
3.2.2 順序表操作49
3.2.3 鍊表操作60
3.3 守規矩的先進先出的佇列74
3.3.1 佇列基礎74
3.3.2 鏈佇列和循環佇列75
3.3.3 佇列的基本操作75
3.3.4 佇列的鏈式存儲76
3.4 後進先出的棧83
3.4.1 什麼是棧83
3.4.2 棧的基本分類84
3.4.3 實踐演練87
第4章 走在算法的路上之——樹91
4.1 樹引發的關係91
4.1.1 樹的概念92
4.1.2 何謂二叉樹94
4.1.3 二叉樹存儲96
4.1.4 操作二叉樹99
4.1.5 遍歷二叉樹102
4.1.6 測試二叉樹106
4.1.7 線索二叉樹113
4.1.8 線索二叉樹的表示113
4.1.9 實踐演練線索二叉樹的操作116
4.2 霍夫曼樹121
4.2.1 霍夫曼樹基礎121
4.2.2 實踐演練123
第5章 走在算法的路上之——圖131
5.1 從哥尼斯堡七橋問題說起131
5.2 幾個相關概念132
5.3 存儲結構136
5.3.1 表示頂點之間相鄰關係的鄰
接矩陣137
5.3.2 鄰接表138
5.3.3 合作的產物——十字鍊表141
5.3.4 實踐演練143
5.4 遍歷圖148
5.4.1 深度優先搜尋148
5.4.2 廣度優先搜尋151
5.4.3 遍歷算法的那點事155
5.4.4 測試圖的遍歷實例157
5.5 圖的連通性160
5.5.1 無向圖的連通分量161
5.5.2 最小生成樹161
5.5.3 關鍵路徑165
5.6 尋求最短的路徑170
5.6.1 求某一頂點到其他各頂點
的最短路徑170
5.6.2 任意一對頂點間的最短路徑174
第6章 體驗查找算法帶來的魅力179
6.1 幾個相關概念179
6.2 基於線性表的查找法180
6.2.1 順序查找法180
6.2.2 折半查找法183
6.2.3 分塊查找法186
6.3 基於樹的查找188
6.3.1 二叉排序樹188
6.3.2 平衡二叉排序樹203
6.4 哈希法209
6.4.1 哈希法基礎209
6.4.2 處理衝突211
6.4.3 哈希表的查找過程212
6.5 索引查找215
6.5.1 索引查找的過程215
6.5.2 實踐演練215
第7章 內部排序220
7.1 排序基礎220
7.1.1 排序的目的和過程220
7.1.2 內部排序與外部排序221
7.1.3 穩定排序與不穩定排序221
7.2 霸道的插入排序222
7.2.1 直接插入排序222
7.2.2 折半插入排序225
7.2.3 表插入排序226
7.2.4 希爾排序227
7.3 交換類排序法230
7.3.1 冒泡排序(相鄰比序法)231
7.3.2 快速排序232
7.4 選擇類排序法237
7.4.1 直接選擇排序237
7.4.2 樹形選擇排序238
7.4.3 堆排序239
7.4.4 實踐演練242
7.5 歸併排序245
7.5.1 歸併排序思想245
7.5.2 二路歸併算法的思路246
7.5.3 實現歸併排序248
7.5.4 實踐演練250
7.6 基數排序253
7.6.1 多關鍵字排序253
7.6.2 鏈式基數排序254
第8章 外部排序和檔案258
8.1 外部信息方便了我們的生活258
8.1.1 磁帶存儲器258
8.1.2 磁碟存儲器259
8.2 外部排序的基本方法261
8.2.1 磁碟排序261
8.2.2 磁帶排序266
8.3 什麼是檔案268
8.4 檔案的組織方式270
8.4.1 順序檔案270
8.4.2 索引檔案270
8.4.3 ISAM檔案271
8.4.4 VSAM檔案273
8.4.5 散列檔案275
8.4.6 多關鍵字檔案275
第9章 從應聘開始談算法277
9.1 面試277
9.1.1 面試前的準備277
9.1.2 常見的面試錯誤278
9.2 常見的算法筆試題279
第10章 經典的數據結構問題303
10.1 約瑟夫環303
10.2 大整數運算306
10.2.1 數組實現大整數運算306
10.2.2 使用鍊表實現大整數運算315
10.3 計算機進制轉換321
10.4 將中序表達式轉換為後序表達式325
第11章 解決數學問題331
11.1 最大公約數和最低公倍數331
11.2 哥德巴赫猜想333
11.3 完全數336
11.4 親密數338
11.5 自守數340
11.6 方程求解341
11.6.1 高斯消元法解方程組342
11.6.2 用二分法解非線性方程346
11.6.3 用牛頓疊代法解非線性方程346
11.7 矩陣運算348
11.8 一元多項式運算352
11.8.1 一元多項式的加法運算352
11.8.2 一元多項式的減法運算357
第12章 解決趣味問題366
12.1 歌星大獎賽366
12.2 借書方案367
12.3 打魚還是曬網368
12.4 捕魚和分魚370
12.5 出售金魚371
12.6 平分七筐魚372
12.7 繩子的長度和井深373
12.8 雞兔同籠375
12.9 漢諾塔376
12.9.1 遞歸法376
12.9.2 非遞歸法378
12.10 馬踏棋盤380
12.10.1 使用循環查找法380
12.10.2 使用遞歸法384
12.10.3 使用棧方法386
12.11 三色球問題390
12.12 新郎和新娘問題391
12.13 計算年齡幾何394
第13章 解決圖像問題395
13.1 八皇后問題395
13.1.1 使用遞歸法395
13.1.2 使用循環法398
13.2 生命遊戲401
13.3 黑白棋問題406
13.4 騎士迷宮問題415
13.5 迷宮中的所有路徑422
第14章 算法的經典問題425
14.1 存錢利息最大化425
14.2 背包問題428
14.2.1 使用動態規劃法429
14.2.2 使用遞歸法434
14.3 農夫過河437
14.4 三色旗440
14.5 取石子443
14.6 停車場管理447
14.7 約瑟夫生者死者遊戲456
第15章 解決奧賽問題459
15.1 孿生素數問題459
15.2 百錢買百雞問題461
15.3 馬克思手稿中的數學題463
15.4 正整數分解為質因數464
15.5 水仙花數465
15.6 素數466
15.6.1 求1000以內的所有素數466
15.6.2 求1000以內的回文素數467
15.6.3 求1000以內的平方迴文數469
15.7 階乘470
15.7.1 使用遞歸法470
15.7.2 實現大數的階乘471
15.8 青蛙過河477
15.9 過河卒481
15.10 素數組合484
15.11 校驗碼問題487
15.12 老師排座位488
15.13 模擬立體圖491
15.14 採藥問題495
15.15 等價表達式問題 497
15.16 購買年貨問題501
1.1 開始學習算法1
1.1.1 算法的特徵和發展由來1
1.1.2 何為算法2
1.2 計算機中的算法3
1.2.1 認識計算機中的算法3
1.2.2 為什麼是程式的“靈魂”4
1.3 表示算法的方法4
1.3.1 用流程圖來表示算法5
1.3.2 用N-S流程圖來表示算法6
1.3.3 用計算機語言表示算法7
1.4 學好算法的秘訣8
第2章 分析妙趣橫生的算法思想9
2.1 八大算法思想9
2.2 比較“笨”的枚舉算法思想9
2.2.1 枚舉算法基礎10
2.2.2 實踐演練10
2.3 聰明一點的遞推算法思想15
2.3.1 遞推算法基礎15
2.3.2 實踐演練15
2.4 充分利用自己的遞歸算法思想18
2.4.1 遞歸算法基礎18
2.4.2 實踐演練18
2.5 各個擊破的分治算法思想22
2.5.1 分治算法基礎23
2.5.2 實踐演練23
2.6 貪心算法思想並不貪婪29
2.6.1 貪心算法基礎29
2.6.2 實踐演練30
2.7 試探法算法思想是一種委婉的做法35
2.7.1 試探法算法基礎35
2.7.2 實踐演練36
2.8 疊代算法39
2.8.1 疊代算法基礎40
2.8.2 實踐演練40
2.9 模擬算法思想42
2.9.1 模擬算法的思路42
2.9.2 實踐演練42
第3章 走在算法的路上之——分析簡單的
數據結構47
3.1 學習編程的注意事項47
3.2 什麼是線性表47
3.2.1 線性表的特性48
3.2.2 順序表操作49
3.2.3 鍊表操作60
3.3 守規矩的先進先出的佇列74
3.3.1 佇列基礎74
3.3.2 鏈佇列和循環佇列75
3.3.3 佇列的基本操作75
3.3.4 佇列的鏈式存儲76
3.4 後進先出的棧83
3.4.1 什麼是棧83
3.4.2 棧的基本分類84
3.4.3 實踐演練87
第4章 走在算法的路上之——樹91
4.1 樹引發的關係91
4.1.1 樹的概念92
4.1.2 何謂二叉樹94
4.1.3 二叉樹存儲96
4.1.4 操作二叉樹99
4.1.5 遍歷二叉樹102
4.1.6 測試二叉樹106
4.1.7 線索二叉樹113
4.1.8 線索二叉樹的表示113
4.1.9 實踐演練線索二叉樹的操作116
4.2 霍夫曼樹121
4.2.1 霍夫曼樹基礎121
4.2.2 實踐演練123
第5章 走在算法的路上之——圖131
5.1 從哥尼斯堡七橋問題說起131
5.2 幾個相關概念132
5.3 存儲結構136
5.3.1 表示頂點之間相鄰關係的鄰
接矩陣137
5.3.2 鄰接表138
5.3.3 合作的產物——十字鍊表141
5.3.4 實踐演練143
5.4 遍歷圖148
5.4.1 深度優先搜尋148
5.4.2 廣度優先搜尋151
5.4.3 遍歷算法的那點事155
5.4.4 測試圖的遍歷實例157
5.5 圖的連通性160
5.5.1 無向圖的連通分量161
5.5.2 最小生成樹161
5.5.3 關鍵路徑165
5.6 尋求最短的路徑170
5.6.1 求某一頂點到其他各頂點
的最短路徑170
5.6.2 任意一對頂點間的最短路徑174
第6章 體驗查找算法帶來的魅力179
6.1 幾個相關概念179
6.2 基於線性表的查找法180
6.2.1 順序查找法180
6.2.2 折半查找法183
6.2.3 分塊查找法186
6.3 基於樹的查找188
6.3.1 二叉排序樹188
6.3.2 平衡二叉排序樹203
6.4 哈希法209
6.4.1 哈希法基礎209
6.4.2 處理衝突211
6.4.3 哈希表的查找過程212
6.5 索引查找215
6.5.1 索引查找的過程215
6.5.2 實踐演練215
第7章 內部排序220
7.1 排序基礎220
7.1.1 排序的目的和過程220
7.1.2 內部排序與外部排序221
7.1.3 穩定排序與不穩定排序221
7.2 霸道的插入排序222
7.2.1 直接插入排序222
7.2.2 折半插入排序225
7.2.3 表插入排序226
7.2.4 希爾排序227
7.3 交換類排序法230
7.3.1 冒泡排序(相鄰比序法)231
7.3.2 快速排序232
7.4 選擇類排序法237
7.4.1 直接選擇排序237
7.4.2 樹形選擇排序238
7.4.3 堆排序239
7.4.4 實踐演練242
7.5 歸併排序245
7.5.1 歸併排序思想245
7.5.2 二路歸併算法的思路246
7.5.3 實現歸併排序248
7.5.4 實踐演練250
7.6 基數排序253
7.6.1 多關鍵字排序253
7.6.2 鏈式基數排序254
第8章 外部排序和檔案258
8.1 外部信息方便了我們的生活258
8.1.1 磁帶存儲器258
8.1.2 磁碟存儲器259
8.2 外部排序的基本方法261
8.2.1 磁碟排序261
8.2.2 磁帶排序266
8.3 什麼是檔案268
8.4 檔案的組織方式270
8.4.1 順序檔案270
8.4.2 索引檔案270
8.4.3 ISAM檔案271
8.4.4 VSAM檔案273
8.4.5 散列檔案275
8.4.6 多關鍵字檔案275
第9章 從應聘開始談算法277
9.1 面試277
9.1.1 面試前的準備277
9.1.2 常見的面試錯誤278
9.2 常見的算法筆試題279
第10章 經典的數據結構問題303
10.1 約瑟夫環303
10.2 大整數運算306
10.2.1 數組實現大整數運算306
10.2.2 使用鍊表實現大整數運算315
10.3 計算機進制轉換321
10.4 將中序表達式轉換為後序表達式325
第11章 解決數學問題331
11.1 最大公約數和最低公倍數331
11.2 哥德巴赫猜想333
11.3 完全數336
11.4 親密數338
11.5 自守數340
11.6 方程求解341
11.6.1 高斯消元法解方程組342
11.6.2 用二分法解非線性方程346
11.6.3 用牛頓疊代法解非線性方程346
11.7 矩陣運算348
11.8 一元多項式運算352
11.8.1 一元多項式的加法運算352
11.8.2 一元多項式的減法運算357
第12章 解決趣味問題366
12.1 歌星大獎賽366
12.2 借書方案367
12.3 打魚還是曬網368
12.4 捕魚和分魚370
12.5 出售金魚371
12.6 平分七筐魚372
12.7 繩子的長度和井深373
12.8 雞兔同籠375
12.9 漢諾塔376
12.9.1 遞歸法376
12.9.2 非遞歸法378
12.10 馬踏棋盤380
12.10.1 使用循環查找法380
12.10.2 使用遞歸法384
12.10.3 使用棧方法386
12.11 三色球問題390
12.12 新郎和新娘問題391
12.13 計算年齡幾何394
第13章 解決圖像問題395
13.1 八皇后問題395
13.1.1 使用遞歸法395
13.1.2 使用循環法398
13.2 生命遊戲401
13.3 黑白棋問題406
13.4 騎士迷宮問題415
13.5 迷宮中的所有路徑422
第14章 算法的經典問題425
14.1 存錢利息最大化425
14.2 背包問題428
14.2.1 使用動態規劃法429
14.2.2 使用遞歸法434
14.3 農夫過河437
14.4 三色旗440
14.5 取石子443
14.6 停車場管理447
14.7 約瑟夫生者死者遊戲456
第15章 解決奧賽問題459
15.1 孿生素數問題459
15.2 百錢買百雞問題461
15.3 馬克思手稿中的數學題463
15.4 正整數分解為質因數464
15.5 水仙花數465
15.6 素數466
15.6.1 求1000以內的所有素數466
15.6.2 求1000以內的回文素數467
15.6.3 求1000以內的平方迴文數469
15.7 階乘470
15.7.1 使用遞歸法470
15.7.2 實現大數的階乘471
15.8 青蛙過河477
15.9 過河卒481
15.10 素數組合484
15.11 校驗碼問題487
15.12 老師排座位488
15.13 模擬立體圖491
15.14 採藥問題495
15.15 等價表達式問題 497
15.16 購買年貨問題501