第1章绪论
1.1什么是算法
1.1.1算法的由来
1.1.2算法的发展
1.1.3算法的例子
1.2重要的问题类型
1.2.1排序
1.2.2查找
1.2.3字符串匹配
1.2.4图问题
1.2.5组合问题
1.2.6几何问题
1.2.7数值问题
1.3基本数据结构
1.3.1线性结构
1.3.2树结构
1.3.3图结构
1.3.4集合
1.3.5数据的物理结构
1.4算法问题求解基础
1.4.1算法求解框架
1.4.2算法设计步骤
1.5算法的表示
1.6为什么学习算法
总结
习题1
第2章算法效率分析基础
2.1算法分析框架
2.1.1算法分析概述
2.1.2算法正确性分析
2.1.3时空效率分析
2.1.4算法分析过程
2.2渐进符号和基本效率类型
2.2.1三种渐进符号
2.2.2渐进符号的特性
2.2.3基本效率类型
2.3非递归算法的数学分析方法
2.4递归算法的数学分析
2.4.1递归算法的数学分析方法
2.4.2斐波那契数列
2.5算法的其他分析方法
总结
习题2
第3章蛮力法
3.1概述
3.2排序问题
3.2.1选择排序
3.2.2冒泡排序
3.3查找问题
3.3.1顺序查找
3.3.2字符串匹配
3.4几何问题
3.4.1最近对问题
3.4.2凸包问题
3.5组合问题
3.5.1旅行商问题
3.5.2背包问题
总结
习题3
第4章分治法
4.1概述
4.2分治法的基本策略及步骤
4.2.1分治法的基本策略
4.2.2分治法的基本步骤
4.3排序问题
4.3.1合并排序
4.3.2快速排序
4.4查找问题
4.4.1折半查找
4.4.2二叉树遍历及其相关特性
4.5数值计算问题
4.5.1大整数乘法
4.5.2Strassen矩阵乘法
4.6几何问题
4.6.1用分治法解最近对问题
4.6.2用分治法解凸包问题
4.7分析分治法在安排循环赛中的应用
总结
习题4
第5章分治策略变体——减治策略和变治策略
5.1减治策略
5.1.1插入排序
5.1.2拓扑排序
5.1.3生成组合对象的算法
5.1.4减常因子算法
5.1.5减可变规模算法
5.2变治策略
5.2.1排序问题
5.2.2平衡查找树
5.2.3霍纳法则和二进制幂
5.2.4问题化简
总结
习题5
第6章动态规划
6.1概述
6.2算法特点
6.2.1备忘录方法
6.2.2最优化原理
6.2.3求解步骤
6.3矩阵连乘问题
6.4最长公共子序列
6.501背包问题
6.6最大子段和
6.7最优二叉查找树
总结
习题6
第7章时空权衡技术
7.1时空权衡策略
7.2计数排序
7.3字符串匹配
7.4散列法
总结
习题7
第8章贪心算法
8.1概述
8.1.1贪心算法的基本要素
8.1.2贪心算法的求解过程
8.2活动安排问题
8.3背包问题
8.4最小生成树问题
8.4.1Prim算法
8.4.2Kruskal算法
8.5单源(点)最短路径问题
8.6哈夫曼编码
总结
习题8
第9章回溯法和分支限界法
9.1回溯法
9.1.1概述
9.1.2子集和问题
9.1.3n皇后问题
9.1.4哈密顿回路
9.1.5装载问题
9.2分支限界法
9.2.1概述
9.2.201背包问题
9.2.3任务分配问题
9.2.4多段图的最短路径问题
9.2.5旅行商问题
总结
习题9
第10章NP完全性理论
10.1判定问题和最优化问题
10.2P类问题
10.3NP类问题
10.4NP完全问题
10.5典型的NP完全问题
10.6其他NP完全问题
10.7NP完全问题的计算机处理
总结
习题10
第11章案例精选
11.1果园篱笆问题
11.2空中飞行管理问题
11.3去数问题
11.4极差问题
11.5最优合并问题
11.6在棋盘中实现从初始布局到目标布局的转变
11.7商店购物问题
11.8旅游预算问题
11.9防卫导弹问题
11.10钓鱼问题
11.11胖男孩问题
11.12护卫队问题
参考文献