PKU算法分析与设计课程讲义

主讲: 屈婉玲 (qwl@pku.edu.cn) 课程代号: 0A002 教材: 计算机算法设计与分析(第2版),王晓东,电子工业出版社,2004.7


一、课程概述

目的

  • 掌握组合算法设计的基本技术
  • 掌握算法分析的基本方法
  • 了解计算复杂性理论的基本概念及其应用

内容

模块重点
顺序算法设计技术分治、动态规划、回朔、贪心、概率算法
顺序算法分析复杂度估计、问题复杂度下界
计算复杂性理论Turing机、NP完全性理论

主要公式

  • Algorithm + Data Structure = Programming
  • Stirling公式:
  • 投资问题:,,

二、算法基础

算法定义

非形式定义:有限条指令的集合,每条指令由有限个计算步骤完成。 形式定义:对所有有效输入停机的Turing机。

算法 = machine

伪码描述

保持程序主要结构,类C/Pascal风格:

Algorithm INSERTION-SORT(A):
    for j = 2 to length[A]
        key = A[j]
        i = j - 1
        while i > 0 and A[i] > key
            A[i+1] = A[i]
            i = i - 1
        A[i+1] = key

算法复杂度

  • 最坏情况: - 输入规模为时的最长时间
  • 平均情况: - 输入规模为时的平均时间
  • 复杂度表示:将基本运算次数表示为输入规模的函数

三、计算复杂性理论

基本分类

复杂度类说明算法类型
线性搜索问题(顺序搜索)
平方插入排序
立方-
指数TSP等难解问题
指数更难解问题

定义

  • :存在,使得对所有有
  • :存在,使得对所有有
  • :且

计算复杂性谱系

P (多项式时间可解)
         |
         v
    BPP, ZPP, ...
         |
         v
    NP (非确定多项式)
         |
         v
    NP-hard / NP-complete (难解问题)

著名公式

  • Church-Turing论题:如果一个函数在某个合理的计算模型上可计算,那么它在Turing机上也是可计算的
  • P=NP?:本世纪7个最重要的数学问题之一

四、经典问题与算法

Hanoi塔问题

, → 64个盘子需要5000亿年

5个基本问题

  1. 投资问题 - 多项目投资收益最大化(整数规划)
  2. Hanoi塔 - 递归结构,
  3. 搜索问题 - 数组中查找元素
  4. 排序问题 - 按递增顺序排列
  5. 选择问题 - 找到第k小的数

五、复杂度分析示例

示例:PrimalityTest(n)

1. s = n
2. for j = 2 to s
3.     if j divides n then return false
5. return true

时间复杂度:(假设乘法) 不能写成,因为复杂度可能不同

示例:

证明:取


六、NP完全性理论

核心结论

  • P类:存在多项式时间算法的问题
  • NP类:解的存在性可在多项式时间内验证的问题
  • NP-hard / NP-complete:难解问题类

复杂性类谱系

  • P / NP / co-NP / PSPACE / EXPTIME
  • 近似算法、概率算法、在线算法、并行算法

课程资源

  • 教学网站:ftp.ss.pku.edu.cn
  • 成绩评定:平时50% + 期末笔试50%