500 likes | 758 Vues
课 程 简 介 课程名称:算法分析与计算复杂性理论 Analysis of Algorithms and Theory of Computational Complexity 课程类型:研究生必修课 基本目的: 掌握组合算法设计的基本技术 掌握算法分析的基本方法 掌握计算复杂性理论的基本概念 学习应用算法理论处理实际问题. 学 习 安 排. 平时作业: 40% 期末笔试: 50% 小论文: 10% 结合研究工作 算法设计或者分析 课程网站: Vod.grids.cn
E N D
课 程 简 介 课程名称:算法分析与计算复杂性理论 Analysis of Algorithms and Theory of Computational Complexity 课程类型:研究生必修课 基本目的: 掌握组合算法设计的基本技术 掌握算法分析的基本方法 掌握计算复杂性理论的基本概念 学习应用算法理论处理实际问题
学 习 安 排 平时作业:40% 期末笔试:50% 小论文: 10% 结合研究工作 算法设计或者分析 课程网站:Vod.grids.cn http://realcourse.grids.cn Email:qwl@pku.edu.cn
引 言 理论上的可计算与现实上的可计算 理论上的可计算 可计算性理论 现实上的可计算 计算复杂性理论 几个有关算法的例子
指数时间的算法 多项式时间的算法 对数多项式时间的算法
著名公式 Algorithm + Data Structure = Programming 好的算法 提高求解问题的效率 节省存储空间 需要解决的问题 问题寻找求解算法 算法设计技术 算法算法的评价 算法分析技术 算法类问题复杂度的评价 问题复杂性分析 问题类能够求解的边界 计算复杂性理论
阶 乘 n! = o(nn) 2n=o(n!) log n! = (n log n)
求 和 例5
估计和式的上界 方法一:放大法
方法二:利用积分 例9
叠代归纳法 差消法----化简递推方程 例12 求解递推方程 相减并化简得
由叠代得 T(n)=O(nlog n)
尝试法----估计递推方程的阶 方法 猜想T(n)的阶 代入方程验证,比较两边的阶的高低 如果右边高,则提高T(n)的阶 否则,降低T(n)的阶 例13 求解递推方程
设T(n)的阶为常数c, 则 设T(n)的阶为cn,则 设T(n)的阶为cn2, 则
设T(n)的阶为cnlog n , 则 令 c=2ln2, 则方程左、右增长率一致
生成函数法 设序列{an},构造形式幂级数 G(x) = a0 + a1x + a2x2 +… + an xn + … 称G(x)为{an}的生成函数 例如 {C(m,n)}的生成函数为 (1+x)m 给定正整数k, {kn}的生成函数为 G(x) =1+ kx + k2x2 + k3x3 + … = 1/(1-kx) 生成函数法: 不直接求解递推方程 求出序列对应的生成函数 将函数展开求得序列通项
递归树法——迭代 例14 log n层 (n2)
例15 log 3/2n层 (n log n)
例16 例17 例18
关于递推方程中 x和 x的处理 先猜想解,然后用数学归纳法证明 例19 估计以下递推关系的阶 根据 T(n) = O(n log n) 猜想原递推方程的解的阶是O(n log n) 证明:T(n) cn log n, 用数学归纳法
归纳基础 对于T(1)=1,显然没有T(1)c 1 log1. 考虑T(2)与T(3), T(2) = 2T(1)+2 = 4 22 log2 =4 T(3) = 2T(1)+3 = 5 23 log3 只要c 1, n 2,就有T(n) cn log n成立 归纳步骤 假设对于小于n的正整数命题为真,那么