譯者序
前言
第1章 引論
1.1 本書討論的內容
1.2 數學知識復習
1.2.1 指數
1.2.2 對數
1.2.3 級數
1.2.4 模運算
1.2.5 證明的方法
1.3 遞歸簡論
1.4 實現泛型特性構件pre-Java5
1.4.1 使用Object錶示泛型
1.4.2 基本類型的包裝
1.4.3 使用接口類型錶示泛型
1.4.4 數組類型的兼容性
1.5 利用Java5泛性實現泛型特性成分
1.5.1 簡單的泛型類和接口
1.5.2 自動裝箱/拆箱
1.5.3 帶有限製的通配符
1.5.4 泛型static方法
1.5.5 類型限界
1.5.6 類型擦除
1.5.7 對於泛型的限製
1.6 函數對象
小結
練習
參考文獻
第2章 算法分析
2.1 數學基礎
2.2 模型
2.3 要分析的問題
2.4 運行時間計算
2.4.1 一個簡單的例子
2.4.2 一般法則
2.4.3 最大子序列和問題的求解
2.4.4 運行時間中的對數
2.4.5 檢驗你的分析
2.4.6 分析結果的準確性
小結
練習
參考文獻
第3章 錶、棧和隊列
3.1 抽象數據類型
3.2 錶ADT
3.2.1 錶的簡單數組實現
3.2.2 簡單鏈錶
3.3 Java Collections API中的錶
3.3.1 Collection接口
3.3.2 Iterator接口
3.3.3 List接口、ArrayList類和LinkedList類
3.3.4 例:remove方法對LinkedList類的使用
3.3.5 關於ListIterator接口
3.4 ArrayList類的實現
3.4.1 基本類
3.4.2 迭代器、Java嵌套類和內部類
3.5 Linked List類的實現
3.6 棧ADT
3.6.1 棧模型
3.6.2 棧的實現
3.6.3 應用
3.7 隊列ADT
3.7.1 隊列模型
3.7.2 隊列的數組實現
3.7.3 隊列的應用
小結
練習
第4章 樹
4.1 預備知識
4.1.1 樹的實現
4.1.2 樹的遍曆及應用
4.2 二叉樹
4.2.1 實現
4.2.2 例子:錶達式樹
4.3 查找樹ADT——二叉查找樹
4.3.1 contains方法
4.3.2 findMin方法和findMax方法
4.3.3 insert方法
4.3.4 remove方法
4.3.5 平均情況分析
4.4 AVL樹
4.4.1 單鏇轉
4.4.2 雙鏇轉
4.5 伸展樹
4.5.1 一個簡單的想法(不能直接使用)
4.5.2 展開
4.6 樹的遍曆
4.7 B樹
4.8 標準庫中的集閤與映射
4.8.1 關於Set接口
4.8.2 關於Map接口
4.8.3 TreeSet類和TreeMap類的實現
4.8.4 使用多個映射的例
小結
練習
參考文獻
第5章 散列
5.1 一般想法
5.2 散列函數
5.3 分離鏈接法
5.4 不用鏈錶的散列錶
5.4.1 綫性探測法
5.4.2 平方探測法
5.4.3 雙散列
5.5 再散列
5.6 標準庫中的散列錶
5.7 可擴散列
小結
練習
參考文獻
第6章 優先隊列(堆)
6.1 模型
6.2 一些簡單的實現
6.3 二叉堆
6.3.1 結構性質
6.3.2 堆序性質
6.3.3 基本的堆操作
6.3.4 其他的堆操作
6.4 優先隊列的應用
6.4.1 選擇問題
6.4.2 事件模擬
6.5 d-堆
6.6 左式堆
6.6.1 左式堆性質
6.6.2 左式堆操作
6.7 斜堆
6.8 二項隊列
6.8.1 二項隊列結構
6.8.2 二項隊列操作
6.8.3 二項隊列的實現
6.9 標準庫中的優先隊列
小結
練習
參考文獻
第7章 排序
7.1 預備知識
7.2 插入排序
7.2.1 算法
7.2.2 插入排序的分析
7.3 一些簡單排序算法的下界
7.4 希爾排序
7.5 堆排序
7.6 歸並排序
7.7 快速排序
7.7.1 選取樞紐元
7.7.2 分割策略
7.7.3 小數組
7.7.4 實際的快速排序例程
7.7.5 快速排序的分析
7.7.6 選擇問題的綫性期望時間算法
7.8 排序算法的一般下界
7.9 桶式排序
7.10 外部排序
7.10.1 為什麼需要一些新的算法
7.10.2 外部排序模型
7.10.3 簡單算法
7.10.4 多路閤並
7.10.5 多相閤並
7.10.6 替換選擇
小結
練習題
參考文獻
第8章 不相交集類
8.1 等價關係
8.2 動態等價性問題
8.3 基本數據結構
8.4 靈巧求並算法
8.5 路徑壓縮
8.6 路徑壓縮和按秩求並的最壞情形
8.7 一個應用
小結
練習題
參考文獻
第9章 圖論算法
9.1 若乾定義
9.2 拓撲排序
9.3 最短路徑算法
9.3.1 無權最短路徑
9.3.2 Dijkstra算法
9.3.3 具有負邊值的圖
9.3.4 無圈圖
9.3.5 所有點對最短路徑
9.3.6 最短路徑的例子
9.4 網絡流問題
9.5 最小生成樹
9.5.1 Prim算法
9.5.2 Kruskal算法
9.6 深度優先搜索的應用
9.6.1 無嚮圖
9.6.2 雙連通性
9.6.3 歐拉迴路
9.6.4 有嚮圖
9.6.5 查找強分支
9.7 NP完全性介紹
9.7.1 難與易
9.7.2 NP類
9.7.3 NP完全問題
小結
練習
參考文獻
第10章 算法設計技巧
10.1 貪婪算法
10.1.1 一個簡單的調度問題
10.1.2 哈夫曼編碼
10.1.3 近似裝箱問題
10.2 分治算法
10.2.1 分治算法的運行時間
10.2.2 最近點問題
10.2.3 選擇問題
10.2.4 一些算術問題的理論改進
10.3 動態規劃
10.3.1 用一個錶代替遞歸
10.3.2 矩陣乘法的順序安排
10.3.3 最優二叉查找樹
10.3.4 所有點對最短路徑
10.4 隨機化算法
10.4.1 隨機數發生器
10.4.2 跳躍錶
10.4.3 素性測試
10.5 迴溯算法
10.5.1 收費公路重建問題
10.5.2 博弈
小結
練習
參考文獻
第11章 攤還分析
11.1 一個無關的智力問題
11.2 二項隊列
11.3 斜堆
11.4 斐波那契堆
11.4.1 切除左式堆中的節點
11.4.2 二項隊列的懶惰閤並
11.4.3 斐波那契堆操作
11.4.4 時間界的證明
11.5 伸展樹
小結
練習
參考文獻
第12章 高級數據結構及其實現
12.1 自頂嚮下伸展樹
12.2 紅黑樹
12.2.1 自底嚮上的插入
12.2.2 自頂嚮下紅黑樹
12.2.3 自頂嚮下的刪除
12.3 確定性跳躍錶
12.4 AA樹
12.5 treap樹
12.6 k-d樹
12.7 配對堆
小結
練習
參考文獻
索引
· · · · · · (
收起)
評分
☆☆☆☆☆
不錯,可惜c++的拿一本書可能會更好一些吧。
評分
☆☆☆☆☆
我的數據結構和算法入門書,全書難度適中,使用java語言非常地道,適閤非科班程序員自學
評分
☆☆☆☆☆
第二版2013年齣的。這本書應該是java程序員必修書之一。以前從沒細考慮過程序效率的同學都應該好好來讀讀的。
評分
☆☆☆☆☆
第2版改用JDK5泛型描述,其他與第1版相比沒大的變化
評分
☆☆☆☆☆
比《算法導論》簡潔
評分
☆☆☆☆☆
现在的程序员总是用着别人封装好的函数、类、库、API,满满的,我们就会觉得编程不过是这么回事,搭积木而已,别人都把材料提供好了,至于材料是怎么做的,不用理会。 真的是这样吗?说数据结构和算法没用的人,那是因为他用不到。为什么用不到?他的层次决定了他不会接触到编...
評分
☆☆☆☆☆
开篇第一章引论的第一节提出一个问题: “设有一组N个数而要确定其中第K个最大者” 并给出两种解法 全排序后返回K位置上的元素。平均复杂度O(NLogN) 再建立一个临时数组,从N中读取K个数,全排序,然后依次读入其余N - K个数进来和第K名比较,大于K的值则插入到合适位置...
評分
☆☆☆☆☆
8.28------- 其实CLRS的书在论证方面也不能算太好,例如霍夫曼编码,缺点说明见此文:http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/ 但是,仍旧比Weiss的走脑。现在觉得,如果是以求甚解的心态去学算法,书本真的不能选薄的。。。因为这种书只能用来当...
評分
☆☆☆☆☆
大学期间从头到尾看了5遍。 代码比较精致,尤其是avl树那段,记忆犹新。 内容上偏基础向,偏实现,适合有一定C语言基础的人入门数据结构。 自己感觉图论讲的一般,后面摊还分析讲的也比较凑合。 额,我的评论太短了。。
評分
☆☆☆☆☆
很好的一本书,给人的感觉像是做开发的人写的,不像其它很多数据结构的书仅仅是对数据结构做描述。 其中各种数据结构的实现具有很强的技巧性,很多都讲了在STL中的实现方法。不过推荐对数据结构有一定基础的人看可能它的实现方式理解起来会容易很多。