《Java算法從菜鳥到達(dá)人》以 Java語言為實(shí)現(xiàn)平臺(tái),全書分四個(gè)部分,用言簡意賅的語言介紹了算法的基本概念、五種經(jīng)典的算法思想、重要的數(shù)據(jù)結(jié)構(gòu)以及實(shí)踐中常用的幾種算法。除第1章和第2章外,書中每章內(nèi)容都包括了基本概念、實(shí)現(xiàn)方式、具體應(yīng)用以及達(dá)人修煉真題。每一種算法思想中的真題都提供了相應(yīng)的源代碼,可供讀者運(yùn)行,從而達(dá)到理論與實(shí)踐并重的目的。
《Java算法從菜鳥到達(dá)人》涉及算法基本分析、算法基本思想、具體應(yīng)用及大量真題等實(shí)用知識(shí),內(nèi)容全面、條理清楚、語言通俗。本書對(duì)計(jì)算機(jī)及相關(guān)專業(yè)本科生及研究生的算法能力提升和就業(yè)將有所幫助;此外,計(jì)算機(jī)科學(xué)相關(guān)領(lǐng)域的工程師以及愛好者也可以將本書作為技術(shù)參考書籍,查找所需算法的相關(guān)內(nèi)容并從中得到啟示;當(dāng)然,對(duì)計(jì)算機(jī)科學(xué)感興趣的讀者以及IT領(lǐng)域項(xiàng)目經(jīng)理也可以閱讀本書,從而開啟算法世界的大門。
前言
第一部分 算法基礎(chǔ)
第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)典算法思想
第3章 遞歸與分治法/18
3.1 遞歸的概念/18
3.2 分治法/22
3.3 分治法的應(yīng)用/24
3.4 達(dá)人修煉真題/26
第4章 動(dòng)態(tài)規(guī)劃算法/52
4.1 動(dòng)態(tài)規(guī)劃基礎(chǔ)/52
4.1.1 動(dòng)態(tài)規(guī)劃基本思想/52
4.1.2 動(dòng)態(tài)規(guī)劃算法舉例—最長公共子序列/52
4.2 動(dòng)態(tài)規(guī)劃算法分析/56
4.2.1 最優(yōu)子結(jié)構(gòu)/56
4.2.2 重疊子問題/57
4.3 動(dòng)態(tài)規(guī)劃算法的應(yīng)用/57
4.3.1 0-1背包問題/57
4.3.2 石子歸并/59
4.3.3 常用動(dòng)態(tài)規(guī)劃類問題/61
4.4 達(dá)人修煉真題/63
第5章 貪心算法/83
5.1 貪心算法基礎(chǔ)/83
5.1.1 貪心算法基本思想/83
5.1.2 貪心算法舉例—裝載問題/83
5.2 貪心算法的分析/84
5.3 貪心算法的應(yīng)用/85
5.3.1 普通背包問題/85
5.3.2 活動(dòng)安排問題/87
5.3.3 紀(jì)念品分組/89
5.4 達(dá)人修煉真題/92
第6章 回溯法/96
6.1 回溯法基本概念與算法框架/96
6.1.1 基本思路/96
6.1.2 回溯法的實(shí)現(xiàn)/98
6.2 回溯法的應(yīng)用/99
6.2.1 0-1背包問題/99
6.2.2 八皇后問題/101
6.2.3 一摞烙餅的排序/102
6.3 達(dá)人修煉真題/105
第7章 分支界限法/109
7.1 分支界限法概念與算法框架/109
7.1.1 分支界限法基本思想/109
7.1.2 算法框架與分析/110
7.1.3 一個(gè)簡單的例子(0-1背包問題)/112
7.2 分支界限法的應(yīng)用/114
7.2.1 TSP問題/114
7.2.2 多段圖的最短路徑問題/117
7.2.3 任務(wù)分配問題/119
7.3 達(dá)人修煉真題/121
第三部分 重要數(shù)據(jù)結(jié)構(gòu)
第8章 棧與隊(duì)列/131
8.1 棧/131
8.2 隊(duì)列/134
8.3 達(dá)人修煉真題/137
第9章 鏈表/153
9.1 鏈表概述/153
9.2 鏈表的操作/154
9.3 達(dá)人修煉真題/157
第10章 樹與二叉樹/165
10.1 樹的概念與定義/165
10.1.1 基本概念/165
10.1.2 樹的表示/166
10.2 二叉樹/167
10.2.1 基本概念/167
10.2.2 二叉樹的存儲(chǔ)結(jié)構(gòu)/168
10.2.3 遍歷二叉樹和線索二叉樹/169
10.3 樹、二叉樹和森林之間的關(guān)系/173
10.4 達(dá)人修煉真題/178
第11章 哈希表/184
11.1 哈希表概述/184
11.2 哈希表的應(yīng)用/187
11.3 達(dá)人修煉真題/189
第12章 并查集/202
12.1 并查集基本思想/202
12.1.1 并查集概念/203
12.1.2 并查集的實(shí)現(xiàn)/203
12.1.3 帶權(quán)并查集/206
12.2 并查集的應(yīng)用/209
12.2.1 食物鏈/209
12.2.2 Kruskal最小生成樹算法/211
12.3 達(dá)人修煉真題/212
第13章 位圖/218
13.1 位圖基本概念/218
13.2 位圖法的應(yīng)用/223
13.2.1 位運(yùn)算常見應(yīng)用/223
13.2.2 位圖法在大數(shù)據(jù)處理中的應(yīng)用/228
13.3 達(dá)人修煉真題/229
第四部分 常用算法
第14章 排序算法/235
14.1 插入排序/235
14.2 選擇排序/240
14.3 交換排序/243
14.4 歸并排序/248
14.5 桶排序/基數(shù)排序/249
14.6 達(dá)人修煉真題/252
第15章 查找算法/257
15.1 基本概念/257
15.2 靜態(tài)查找/258
15.3 動(dòng)態(tài)查找/261
15.4 哈希查找/266
15.5 達(dá)人修煉真題/267
第16章 字符串匹配算法/273
16.1 簡單字符串匹配/273
16.2 KMP算法/274
16.3 BM算法/277
16.4 SUNDAY算法/278
16.5 達(dá)人修煉真題/278
附 錄/287