目录CONTENTS 第1章基础知识1 1.1有关算法的基本概念1 1.2算法的伪码描述5 1.3算法的数学基础6 1.3.1函数的渐近的界6 1.3.2求和的方法10 1.3.3递推方程求解方法12 习题121 第2章分治策略26 2.1分治策略的基本思想26 2.1.1两个熟悉的例子26 2.1.2分治算法的一般性描述27 2.2分治算法的分析技术27 2.3改进分治算法的途径31 2.3.1通过代数变换减少子问题个数31 2.3.2利用预处理减少递归内部的计算量34 2.4典型实例37 2.4.1快速排序算法37 2.4.2选择问题40 2.4.3n-1次多项式在全体2n次方根上的求值44 习题247 第3章动态规划52 3.1动态规划的设计思想52 3.1.1多起点、多终点的最短路径问题53 3.1.2使用动态规划技术的必要条件54 3.2动态规划算法的设计要素55目录算法设计与分析(第3版)3.2.1子问题的划分和递推方程56 3.2.2动态规划算法的递归实现57 3.2.3动态规划算法的迭代实现58 3.2.4一个简单实例的计算过程59 3.3动态规划算法的典型应用60 3.3.1投资问题60 3.3.2背包问题63 3.3.3最长公共子序列LCS65 3.3.4图像压缩68 3.3.5最大子段和72 3.3.6最优二分检索树76 3.3.7生物信息学中的动态规划算法80 习题383 第4章贪心法87 4.1贪心法的设计思想87 4.2关于贪心法的正确性证明90 4.3对贪心法得不到最优解情况的处理94 4.4贪心法的典型应用98 4.4.1最优前缀码98 4.4.2最小生成树103 4.4.3单源最短路径108 习题4110 第5章回溯与分支限界114 5.1回溯算法的基本思想和适用条件114 5.1.1几个典型的例子114 5.1.2回溯算法的适用条件118 5.2回溯算法的设计步骤119 5.2.1回溯算法的递归实现和迭代实现119 5.2.2几个典型的例子120 5.3回溯算法的效率估计和改进途径122 5.4分支限界124 5.4.1背包问题125 5.4.2最大团问题127 5.4.3货郎问题128 5.4.4圆排列问题129 5.4.5连续邮资问题131 习题5132 第6章线性规划134 6.1线性规划模型134 6.1.1模型134 6.1.2二维线性规划的图解法137 6.2标准形139 6.2.1标准形的基本概念139 6.2.2标准形的可行解的性质140 6.3单纯形法143 6.3.1确定初始基本可行解143 6.3.2最优性检验143 6.3.3基变换144 6.3.4单纯形表146 6.3.5人工变量和两阶段法148 6.3.6单纯形法的有限终止154 6.4对偶性155 6.4.1对偶线性规划155 6.4.2对偶单纯形法159 6.5整数线性规划的分支限界算法160 习题6165 第7章网络流算法171 7.1最大流问题171 7.1.1网络流及其性质171 7.1.2FordFulkerson算法173 7.1.3Dinic有效算法176 7.2最小费用流184 7.2.1Floyd算法184 7.2.2最小费用流的负回路算法186 7.2.3最小费用流的最短路径算法188 7.3运输问题189 7.3.1确定初始调运方案191 7.3.2改进调运方案191 7.3.3表上作业法193 7.4二部图匹配194 7.4.1二部图的最大匹配194 7.4.2赋权二部图的匹配197 习题7203 第8章算法分析与问题的计算复杂度208 8.1平凡下界209 8.2直接计数求解该问题所需要的最少运算210 8.3决策树211 8.4检索算法的时间复杂度分析212 8.5排序算法的时间复杂度分析214 8.5.1冒泡排序算法214 8.5.2堆排序算法215 8.5.3排序算法的决策树与算法类时间复杂度的下界220 8.6选择算法的时间复杂度分析222 8.6.1找最大和最小问题223 8.6.2找第二大问题224 8.6.3找中位数的问题226 8.7通过归约确认问题计算复杂度的下界228 习题8229 第9章NP完全性231 9.1P类与NP类231 9.1.1易解的问题与难解的问题231 9.1.2判定问题233 9.1.3NP类235 9.2多项式时间变换与NP完全性236 9.2.1多项式时间变换236 9.2.2NP完全性及其性质238 9.2.3CookLevin定理——第一个NP完全问题239 9.3几个NP完全问题239 9.3.1最大可满足性与三元可满足性239 9.3.2顶点覆盖、团与独立集241 9.3.3哈密顿回路与货郎问题243 9.3.4恰好覆盖245 9.3.5子集和、背包、装箱与双机调度247 9.3.6整数线性规划249 习题9252 第10章近似算法255 10.1近似算法及其近似比255 10.2多机调度问题256 10.2.1贪心的近似算法256 10.2.2改进的贪心近似算法257 10.3货郎问题258 10.3.1最邻近法258 10.3.2最小生成树法259 10.3.3最小权匹配法259 10.4背包问题261 10.4.1一个简单的贪心算法261 10.4.2多项式时间近似方案261 10.4.3伪多项式时间算法与完全多项式时间近似方案262 习题10264 第11章随机算法266 11.1概率论预备知识266 11.2对随机快速排序算法的分析268 11.3随机算法的分类及其局限性270 11.3.1拉斯维加斯型随机算法270 11.3.2蒙特卡洛型随机算法270 11.3.3随机算法的局限性271 11.4素数检验和多项式恒等检验271 11.4.1素数检验272 11.4.2多项式恒等检验273 11.5随机游动算法274 11.5.1有限马尔可夫链及其表示274 11.5.2求解二元布尔可满足性问题的随机游动算法275 11.6姚的极小极大原理276 习题11278 第12章处理难解问题的策略279 12.1对问题施加限制279 12.1.1二元可满足性问题280 12.1.2霍恩公式可满足性问题280 12.2固定参数算法282 12.3改进指数时间算法284 12.4启发式方法286 12.5平均情形的复杂性287 12.6难解算例生成289 12.6.1相变现象与难解性289 12.6.2隐藏解的难解算例291 12.7基于统计物理的消息传递算法292 12.7.1消息传递算法与回溯法、局部搜索算法的比较292 12.7.2用消息传递算法求解3SAT问题293 12.8量子算法简介294 12.8.1量子比特294 12.8.2正交测量295 12.8.3量子门296 12.8.4一个量子算法297 习题12299 参考文献300