《C/C++算法從菜鳥到達(dá)人》用言簡意賅的語言介紹了算法的基本概念、五種經(jīng)典的算法思想、重要的數(shù)據(jù)結(jié)構(gòu)以及實(shí)踐中常用的幾種算法。本書中每章內(nèi)容都包括了基本概念、實(shí)現(xiàn)方式、具體應(yīng)用以及近年相關(guān)的面試真題。每一種算法思想中的面試真題都提供了相應(yīng)的源代碼,可供讀者運(yùn)行,從而達(dá)到理論與實(shí)踐并重的目的。《C/C++算法從菜鳥到達(dá)人》從算法基本分析到算法基本思想,再到具體應(yīng)用及大量面試真題,內(nèi)容全面,條理清楚,語言通俗。本書對(duì)計(jì)算機(jī)及相關(guān)專業(yè)本科生及研究生的面試、筆試將有所幫助;此外,計(jì)算機(jī)科學(xué)相關(guān)領(lǐng)域的工程師以及愛好者也可以將本書當(dāng)作技術(shù)參考書籍,在需要時(shí)找到所需算法的相關(guān)內(nèi)容直接應(yīng)用或得到啟示;當(dāng)然,對(duì)計(jì)算機(jī)科學(xué)感興趣的高中生以及項(xiàng)目經(jīng)理也可以閱讀本書,從而開啟算法世界的大門。
目錄
前言
第一部分 算法基礎(chǔ)/1
第1章 算法綜述/2
1.1 算法在計(jì)算機(jī)系統(tǒng)中的作用/2
1.1.1 算法的定義/2
1.1.2 算法的地位/2
1.1.3 一個(gè)簡單的算法/3
1.2 偽代碼的約定/4
第2章 算法分析/6
2.1 精確效率分析/6
2.2 漸進(jìn)效率分析/8
2.2.1 漸進(jìn)記號(hào)/9
2.2.2 漸進(jìn)記號(hào)的應(yīng)用/10
2.3 遞歸式求解/15
第二部分 經(jīng)典算法思想/17
第3章 遞歸與分治/18
3.1 遞歸的概念/18
3.2 分治法/22
3.3 分治法的應(yīng)用/24
3.4 達(dá)人修煉/26
第4章 動(dòng)態(tài)規(guī)劃算法/55
4.1 動(dòng)態(tài)規(guī)劃基礎(chǔ)/55
4.1.1 動(dòng)態(tài)規(guī)劃基本思想/55
4.1.2 動(dòng)態(tài)規(guī)劃算法舉例——最長公共子序列/55
4.2 動(dòng)態(tài)規(guī)劃算法分析/59
4.2.1 最優(yōu)子結(jié)構(gòu)/59
4.2.2 重疊子問題/60
4.3 動(dòng)態(tài)規(guī)劃算法的應(yīng)用/60
4.3.1 0-1背包問題/60
4.3.2 石子歸并/62
4.3.3 常用動(dòng)態(tài)規(guī)劃類問題/65
4.4 達(dá)人修煉真題/66
第5章 貪心算法/90
5.1 貪心算法基礎(chǔ)/90
5.1.1 貪心算法基本思想/90
5.1.2 貪心算法舉例——裝載問題/90
5.2 貪心算法的分析/91
5.3 貪心算法的應(yīng)用/92
5.3.1 普通背包問題/92
5.3.2 活動(dòng)安排問題/94
5.3.3 紀(jì)念品分組/96
5.4 達(dá)人修煉真題/99
第6章 回溯法/103
6.1 回溯法基本概念與算法框架/103
6.1.1 基本思路/103
6.1.2 回溯法的實(shí)現(xiàn)/105
6.2 回溯法的應(yīng)用/106
6.2.1 0-1背包問題/106
6.2.2 八皇后問題/108
6.2.3 一摞烙餅的排序/110
6.3 達(dá)人修煉真題/113
第7章 分支界限法/116
7.1 分支界限法概念與算法框架/116
7.1.1 分支界限法基本思想/116
7.1.2 算法框架與分析/117
7.1.3 一個(gè)簡單的例子(0-1背包問題)/119
7.2 分支界限法的應(yīng)用/121
7.2.1 TSP問題/121
7.2.2 多段圖的最短路徑問題/125
7.2.3 任務(wù)分配問題/127
7.3 達(dá)人修煉真題/129
第三部分 重要數(shù)據(jù)結(jié)構(gòu)/136
第8章 棧與隊(duì)列/137
8.1 棧/137
8.2 隊(duì)列/140
8.3 達(dá)人修煉真題/143
第9章 鏈表/164
9.1 鏈表概述/164
9.2 鏈表的操作/165
9.3 達(dá)人修煉真題/168
第10章 樹與二叉樹/176
10.1 樹的概念與定義/176
10.1.1 基本概念/176
10.1.2 樹的表示/177
10.2 二叉樹/178
10.2.1 基本概念/178
10.2.2 二叉樹的存儲(chǔ)結(jié)構(gòu)/179
10.2.3 遍歷二叉樹和線索二叉樹/180
10.3 樹、二叉樹和森林/184
10.4 達(dá)人修煉真題/189
第11章 散列表/197
11.1 散列表概述/197
11.2 散列表的應(yīng)用/200
11.3 達(dá)人修煉真題/202
第12章 并查集/219
12.1 并查集基本思想/219
12.1.1 并查集概念/220
12.1.2 并查集的實(shí)現(xiàn)/220
12.1.3 帶權(quán)并查集/224
12.2 并查集的應(yīng)用/226
12.2.1 食物鏈/226
12.2.2 Kruskal最小生成樹算法/228
12.3 達(dá)人修煉真題/230
第13章 位圖/233
13.1 位圖基本概念/233
13.2 位圖法的應(yīng)用/238
13.2.1 位運(yùn)算常見應(yīng)用/238
13.2.2 位圖法在大數(shù)據(jù)處理中的應(yīng)用/244
13.3 達(dá)人修煉真題/245
第四部分 常用算法/251
第14章 排序算法/252
14.1 插入排序/252
14.2 選擇排序/257
14.3 交換排序/261
14.4 歸并排序/266
14.5 桶排序/基數(shù)排序/267
14.6 達(dá)人修煉真題/270
第15章 查找算法/275
15.1 基本概念/275
15.2 靜態(tài)查找/276
15.3 動(dòng)態(tài)查找/279
15.4 散列查找/286
15.5 達(dá)人修煉真題/286
第16章 字符串匹配算法/292
16.1 簡單字符串匹配/292
16.2 KMP算法/293
16.3 BM算法/296
16.4 SUNDAY算法/297
16.5 達(dá)人修煉真題/298
結(jié)束語/313
算法相關(guān)書籍推薦/313