计算机算法设计与分析(第4版) 王晓东 著 2012.2 笔记(这本书还不错,偏实用、有难度)

计算机算法设计与分析(第4版)

目录

  • 1 算法概述
  • 2 递归与分治策略
  • 3 动态规划
  • 4 贪心算法
  • 5 回溯法
  • 6 分支限界法
  • 7 随机化算法
  • 8 线性规划与网络流

算法概述

  1. 复杂性分析
  2. NP-完全性理论

递归与分治策略

  1. 排列问题:Permutate
    1. 注意,递归嵌套在一个函数里,特别选择参数k,k之前的代表已经固定,k之后的依次交换并递归
  2. 整数划分
    1. 为求不同的划分,则将划分的元素按从大到小排序(全局序约束去除了对称性带来的重复)
    2. 设n的最大加数<=m的划分数为q(n,m),
      1. q(n, 1) = 1
      2. q(n, m) = q(n, n), m>=n
      3. q(n, n) = q(n, n-1) + 1
      4. * q(n, m) = q(n, m-1) + 'q(n-m, m) 注意,此式利用了式2的定义
  3. 二分搜索
    1. 如果正确无溢出地计算 int middle = (left + right)/2; ?
  4. 大整数乘法
    1. 设X=AB,Y=CD(分为2段),则XY=AC2^n + ((A-B)(D-C) + AC + BD)2^(n/2) + BD,只需做3个子乘法
  5. Strassen矩阵乘法*
  6. L型棋盘覆盖(似乎出现在《算法设计手册》上?)
  7. Merge Sort(原始为递归版本)
    1. 自然合并排序(自底向上):不需要执行合并步?
  8. Quick Sort
    1. int Partition(Type A[startIndex, endIndex]):
      1. 选择一个元素作为Pivot,小于它的swap到左边,大于的到右边,返回Pivot的位置索引
        1. i,j指针分别从左右两边向中间扫描,当遇到A[i]>Pivot>A[j]的情况,交换A[i]和A[j],然后继续
  9. 线性时间选择:嗯,必须把这个算法的示意图画出来,并准确理解,写出对应的复杂性递归方程
    1. p29 本书这里选择n<75时排序,则T(n)=O(n)+T(n/5)+T(3n/4)
  10. 最接近点对
    1. 考虑1维时的简单情况
    2. 2维:最坏情况下n^2 /4个候选点对
      1. 考虑P1中任意一点p1,对应P2中最多只有6个点(假设最小距离点对分别位于P1、P2)...
        1. 因此最多只需检查n/2 * 6 = 3n个候选者(可投影到l上,选择跟p1最近的6个点 ?)
  11. 循环赛日程表
    1. n=2^k
    2. 1到n行一分为二,先递归处理,然后将左上部分复制到右下,左下到右上

动态规划

  1. 矩阵连乘的最优计算次序
    1. 穷举:P(n)实际上是Catalan数。。。
  2. DP要素:
    1. 最优子结构
    2. 重叠子问题
    3. p50 备忘录方法的递归方式是自顶向下的
  3. LCS
  4. 最大子段和 O(n)
    1. ?b[j] = max{ b[j-1] + a[j], a[j]}, 1<=j<=n
    2. 最大子矩阵和:分别用左上角和右下角坐标表示子矩阵;用1维的MaxSum可求MaxSum2
  5. 凸多边形最优三角剖分
    1. 定义在三角形上的权函数?
    2. *一般情况下,凸n多边形的最优三角剖分对应于一棵n-1叶节点的语法树
  6. 多边形游戏:略 TODO
  7. 图像压缩:略 TODO
  8. 电路布线(图的最少重叠的二部平面图划分?)
  9. 流水作业调度:略 TODO
  10. 0-1背包(Knapsack):略 TODO
    1. 跳跃点集?
  11. 最优BST(Huffman?)

贪心算法

  1. 活动安排
  2. 与DP的差异:GA自顶向下地以迭代方式选择局部最优解
  3. 最优装载:最近的优先
  4. Huffman编码
  5. 单源最短路径(Dijkstra)
  6. MST
    1. Prim
    2. Kruskal
  7. 多机调度:最长处理时间的作业优先?

回溯法

  1. p116 如果从根节点到当前扩展节点的开销已经超过当前找到的最好的路线,则可将其子树剪去
  2. p118 子集树 vs 排列树
  3. 装载问题'
  4. 批处理作业调度
    1. 最坏情况下O(n!)
  5. 符号三角形
    1. +/-的倒三角形,2个同号下面是+,2个异号下面是-
  6. 'n后
    1. 用完全n叉树表示解空间,可行性约束Place剪去不满足行列和斜线约束的子树(!!)
    2. 非递归的迭代回溯*
  7. 0-1背包
  8. 最大团
  9. 图的m-着色
  10. TSP
  11. 圆排列(离散几何?)
    1. 要求各圆与底边相切,要求最小长度的排列
  12. 电路板排列(ADM中似乎有讲?)
  13. 连续邮资问题
    1. 要求n种不同邮票的最佳面值设计,具有最大连续邮资区间

分支限界法

  1. p161 选择一个最有利的节点作为扩展节点,使搜索朝最优解的分支推进。。。
    1. 按此说法,元启发式搜索全部是分支限界了?
  2. 单源最短路径(Dijkstra)?
    1. 优先队列式分支限界?
  3. 装载问题?
  4. 布线问题:略 TODO
  5. 0-1背包
  6. 最大团
  7. TSP
  8. 电路板排列
  9. 批处理作业调度

随机化算法

  1. 随机数
  2. 数值随机化
  3. Sherwood:如快速排序中随机选择一个Pivot
    1. 搜索有序表:随机抽取元素若干次,然后从较接近目标的位置开始做顺序搜索
    2. 跳跃表(SkipList)
  4. Las Vegas:有可能找不到解?
    1. 随机放置(当然注意不要有冲突)的n后??哈
    2. 整数因子分解:随机选择一个尝试?Pollard算法?kao
  5. Monte Carlo:得到正确解的概率>p>1/2
    1. 主元素(占比大于一半)问题
    2. 素性测试

线性规划与网络流

  1. LP和Simplex:略
    1. 一般LP的2阶段单纯形
  2. 最大网络流
    1. 概念:源s 汇t 边流 残流网络(?)
    2. 增广路
    3. 预流推进
    4. 应用:
      1. 二部图的最大匹配
      2. 带下界约束的最大流
      3. ?表格数据取整(要求round后其和不变)
  3. 最小费用流
    1. 消圈
    2. 最小费用路
    3. 网络单纯形 

你可能感兴趣的:(C++,动态规划,快速排序,网络流,算法分析)