算法导论第二版

《算法导论第二版》


(ppt)

第一章 绪论

  • 1.1 算法的基本特征
  • 1.2 算法研究的意义
  • 1.3 算法的描述形式
  • 1.4 算法分析
  • 1.5 增长速率
  • 1.6 算法正确性分析 

第二章 渐进符号

  • 2.1 Θ符号(渐进符号)
  • 2.2 Ο符号(渐进上界)
  • 2.3 Ω符号(渐进下界)
  • 2.4 利用极限比较函数间的增长速度

第三章 分治法及递归算法的分析方法

  • 3.1 分治法
    • 1. 什么是分治法
    • 2. 应用分治法的三个基本步骤
    • 3. 归并排序(Merge Sort)
    • 4. 归并排序算法分析
      • 时间复杂度:最好、最坏、平均都是O(nlgn)
      • 空间复杂度:需要两个额外的辅助数组L和R来存放A[p...q]和A[q+1...r],因此空间复杂度为O(n)
    • 5. 分治法适用条件
  • 3.2 递归算法的分析
    • 1. 替换法
    • 2. 递归树方法
    • 3. Master方法
  • 3.3 快速排序算法设计与分析
    • 1. 快速排序算法设计
    • 2. 快速排序算法分析
      • 时间复杂度:最坏O(n2),最好和平均O(nlgn)
      • 空间复杂度:由于快排是原地算法,并不用到辅助数组,所以空间复杂度为O(1)
    • 3. 平衡划分
    • 4. 随机划分的快速排序算法分析

(书+ppt) 

第三部分 数据结构

  • 第13章 红黑树
    • 4.1 二叉查找树性质
    • 4.2 红黑树的特性
    • 4.3 黑高度(具有n个内部节点的红黑树的高度最多为2lg(n+1))
    • 4.4 红黑树的调整操作(变颜色+旋转)
    • 4.5 红黑树的插入操作
    • 4.6 红黑树的删除操作
  • 第14章 数据结构的扩张
    • 5.1 动态序统计
      • 1. 找第i个最小值操作:O(lgn)
      • 2. 求x的序值操作:O(lgn)
      • 3. 插入一个节点size域的调整
      • 4. 删除一个节点size域的调整
      • 5. 插入和删除一个节点的时间:O(lgn)
    • 5.2 数据结构扩张的步骤(定理14.1)
    • 5.3 区间树
      • 1. 挑选红黑树作为基本数据结构
      • 2. 确定需增加的信息域
      • 3. 核实增加max域后是否可以维持红黑树原有的性能
      • 4. 新增区间树的查找操作:时间为O(lgn)
      • 定理14.2

第四部分 高级设计和分析技术

  • 第15章 动态规划(应用范围非常广,只要问题具有最优子结构性质,就可以用动态规划方法来求解,只不过说在分解后重叠子问题不是很多的情况下,它的优势并不明显)
    • 6.1 动态规划方法的基本步骤
    • 6.2 装配线调度问题(θ(n))
    • 6.3 矩阵链乘(O(n3))
    • 6.4 动态规划的要素
      • 问题的最优子结构性质(必要条件,若问题没有最优子结构性质,不能用动态规划方法求解)
      • 重叠子问题(非必要条件,重叠的子问题越多越有优势)
      • 记忆法(备忘录方法)
    • 6.5 最长公共子序列问题(θ(mn))
    • 6.6 最优二叉查找树(O(n3))
  • 第16章 贪心算法
    • 7.1 贪心法的基本思想
    • 7.2 活动选择问题(很重要,基础)
      • 问题的输入
      • 活动相容或不冲突
      • 活动选择问题
      • 动态规划方法
      • 贪心法解此问题
    • 7.3 贪心法应用注意事项
      • 应用贪心法的几项工作
      • 贪心选择性质
      • 最优子结构性质
      • 贪心法与动态规划方法比较
    • 7.4 Huffman编码
      • 前缀码
      • 最优前缀码
      • 构造Huffman编码
      • 最优前缀码的贪心选择性质和最优子结构性质
        • 引理16.2 贪心选择性质
        • 引理16.3 最优子结构性质
    • 7.5 贪心法的理论基础
      • 1. 胚
      • 2. 最大独立子集
      • 3. 加权胚
      • 4. 最优子集
      • 5. 加权胚的通用贪心算法
        • 加权胚的贪心选择性质
        • 加权胚的最优子结构性质
      • 6. 一个任务调度问题(胚的应用)
  • 第17章 平摊分析
    • 8.1 平摊分析方法
    • 8.2 合计法
    • 8.3 记账法
    • 8.4 势能法
    • 8.5 动态表

第五部分 高级数据结构

  • 第19章 二项堆
    • 19.1 二项树与二项堆
      • 19.1.1 二项树
      • 19.1.2 二项堆
    • 19.2 对二项堆的操作
  • 第20章 斐波那契堆
    • 20.1 斐波那契堆的结构
    • 20.2 可合并堆的操作
    • 20.3 减小一个关键字与删除一个结点
    • 20.4 最大度数的界

第六部分 图算法

  • 第26章 最大流
    • 26.1 流网络
    • 26.2 Ford-Fulkerson方法
      • Ford-Fulkerson方法的时间复杂度为:O(E|f*|)
      • 一次循环所花费的时间为O(E),|f*|为while循环的次数(不确定),即增广路径的条数。
      • Edmonds-Karp算法是真正可用的求解最大流的算法,它的时间复杂度为O(VE2)
      • Ford-Fulkerson:O(E|f*|) —> Edmonds-Karp:O(VE2) —> push-relabel:O(V2E) —> relable-to-front:O(V3)。(性能不断提高,因为E>V,边数大于顶点数)
    • 26.3 最大二分匹配
    • 26.4 Push-relabel algorithms
    • 26.5 The relabel-to-front algorithm

课堂上涉及到的各算法的时间复杂度:

1. 插入排序:最好情况:O(n),最坏情况:O(n2),平均情况:O(n2),它的循环不变式为:子数组A[1...j-1]始终为排好序的状态。

2. 二叉查找树:设二叉树的高度为h,则静态操作:查找节点、找前驱、后继等时间为O(h)。动态操作:插入和删除节点等时间为O(h)。均与二叉树的高度有关。

3. 红黑树(一种比较平衡的二叉查找树):红黑树的高度为h=O(lgn)。旋转操作只是几个指针的调整,时间为O(1)。插入操作时间为O(lgn),删除操作时间也为O(lgn)。 

4. 活动选择问题:动态规划方法O(n3),贪心法O(nlgn)

5. Huffman编码:O(nlgn)

posted @ 2019-12-23 09:40  myhuang  阅读(435)  评论(0编辑  收藏  举报