第1章 算法基础知识 1
1.1 算法简介 1
1.2 算法描述形式 2
1.3 算法复杂性分析 3
1.3.1 时间复杂度 3
1.3.2 空间复杂度 5
习题 6
第2章 线性数据结构与算法 7
2.1 线性表 7
2.1.1 线性表定义及特点 7
2.1.2 顺序表 7
2.1.3 链表 10
2.1.4 数组与链表性能比较 16
2.2 栈与队列 17
2.2.1 栈 17
2.2.2 队列 19
2.3 应用举例 24
2.3.1 队列应用举例 24
2.3.2 栈应用举例 26
习题 30
第3章 非线性数据结构与算法 33
3.1 树与二叉树 33
3.1.1 树的基本概念 33
3.1.2 二叉树 34
3.1.3 树与二叉树的存储结构 35
3.1.4 树的搜索 39
3.2 图 67
3.2.1 图的基本概念 68
3.2.2 图的存储结构 69
3.2.3 图的搜索 74
3.3 应用举例 77
3.3.1 课程安排问题 77
3.3.2 关键路径问题 80
习题 84
第4章 递归与分治 87
4.1 递归法 87
4.1.1 递归思想 87
4.1.2 应用举例 88
4.2 分治法 95
4.2.1 问题的提出 95
4.2.2 分治法概述 96
4.2.3 应用举例 98
习题 109
第5章 贪心法 112
5.1 问题的提出 112
5.2 贪心法概述 112
5.3 应用举例 114
5.3.1 哈夫曼编码 114
5.3.2 单源最短路径 118
5.3.3 最小生成树 123
5.3.4 背包问题 129
5.3.5 多机调度问题 132
5.3.6 马踏棋盘问题 135
习题 138
第6章 动态规划 141
6.1 问题的提出 141
6.2 动态规划法概述 142
6.3 应用举例 144
6.3.1 多源最短路径 144
6.3.2 背包问题 146
6.3.3 图像压缩 149
6.3.4 最长公共子序列问题 151
习题 154
第7章 回溯法 158
7.1 问题的提出 158
7.2 回溯法概述 159
7.3 应用举例 161
7.3.1 背包问题 161
7.3.2 n皇后问题 166
7.3.3 组合问题 168
7.3.4 填字游戏 170
习题 172
第8章 分枝定界 176
8.1 问题的提出 176
8.2 分枝定界法概述 176
8.3 应用举例 177
8.3.1 背包问题 178
8.3.2 旅行商问题 188
习题 192
参考文献 194