算法期末复习总结

算法期末复习

  • 一、概论
  • 二、算法效率分析
    • 2.1算法分析框架
    • 2.2 三种渐进符号
    • 2.3 非递归算法的效率
    • 2.4 递归算法的效率
  • 三、蛮力法
    • 3.1 选择排序
    • 3.2 冒泡排序
    • 3.3 穷举法
      • 旅行商问题(TSP)
      • 背包问题
      • 分配问题
  • 四、递归算法
  • 五、分治法
    • 5.1 大整数相乘
    • 5.2 Stranssen矩阵乘法
    • 5.3 二分搜索
    • 5.4 归并排序
    • 5.5 快速排序
    • 5.6 棋盘格问题
  • 六、减治法
    • 6.1 减去一个常量
      • 插入排序
      • 拓扑排序
    • 6.2 减去一个常量因子
      • 二分查找
      • 假币问题
      • 俄罗斯农民问题
    • 6.3 减去的规模是可变的
  • 七、变治法
    • 7.1 实例化简
      • 预排序
      • 高斯消去法
      • 堆排序
    • 7.2 改变表现
      • 霍纳法则
    • 7.3 问题化简
      • 线性规划
      • 简化为图
  • 八、回溯法和分支限界法
    • 8.1 DFS
    • 8.2 BFS
    • 8.3 回溯法
      • 0-1背包问题
      • TSP问题
      • n皇后问题
    • 8.4 分支限界法
      • 0-1背包问题
      • 装载问题
    • 8.5 方法比较
  • 九、动态规划
    • 9.1 计算二项式系数
    • 9.2 最长公共子序列(LCS)
    • 9.3 动态矩阵相乘
    • 9.4 0-1背包问题
    • 9.5 多阶段决策问题
      • Forward
      • Backward
      • Warshall(求传递闭包)
      • Floyd(求最短路径)
    • 9.6 最优性原理的证明
  • 十、贪心技术
    • 10.1 活动安排问题
    • 10.2 背包问题
    • 10.3 Dijstra算法
    • 10.4 Prim算法
    • 10.5 Kruskal算法

一、概论

  • 算法是一系列解决问题的明确指令

算法的特点

  1. 输入:>=0
  2. 输出:>=1
  3. 确定性
  4. 有限性
  5. 可行性

二、算法效率分析

2.1算法分析框架

  • 运行时间
  • 输入规模
  • 算法的效率函数
  • 最好情况、最坏情况、平均情况

算法期末复习总结_第1张图片

  • 平均复杂度
    算法期末复习总结_第2张图片

2.2 三种渐进符号

算法期末复习总结_第3张图片

  1. O(g(n)):增长的比g(n)慢(或等于)
  • n ∈ O(n2)
  1. Ω(g(n)):增长的比g(n)快(或等于)
  • n3 ∈ Ω(n2)

算法期末复习总结_第4张图片

2.3 非递归算法的效率

  1. 决定用哪个参数表示输入规模
  2. 找出算法的基本操作
  3. 检查基本操作的的执行效率是否只依赖于输入规模。
  4. 建立一个算法基本操作执行次数的求和表达式
  5. 用求和运算的标准公式和法则建立一个操作次数的闭合公式,或至少确定其增长次数

算法期末复习总结_第5张图片

算法期末复习总结_第6张图片
算法期末复习总结_第7张图片

2.4 递归算法的效率

  1. 确定用哪个参数作为输入规模的度量标准
  2. 找出算法的基本操作
  3. 检查对相同规模的不同输入,基本操作的执行次数是否可能不同。如果可能,则最好情况、最坏情况和平均情况要分开讨论
  4. 对算法基本操作的执行次数建立一个递推关系及初始条件
  5. 解递推公式,或至少确定其增长次数

算法期末复习总结_第8张图片
算法期末复习总结_第9张图片

算法期末复习总结_第10张图片
算法期末复习总结_第11张图片

三、蛮力法

3.1 选择排序

算法期末复习总结_第12张图片

3.2 冒泡排序

算法期末复习总结_第13张图片

3.3 穷举法

旅行商问题(TSP)

  • 问题:找出一条n个给定城市间的最短路径,使我们在回到出发点的城市之前,对每个城市都只访问一次
  • 实质上是求图的最短哈密顿回路的问题

算法期末复习总结_第14张图片

背包问题

  • 给定n个重量为w1,w2…,wn,价值为v1,v2…,vn的物品和一个承重为W的背包,求这些物品中一个最有价值的子集,且能装入背包中
    算法期末复习总结_第15张图片

分配问题

  • n个任务分给n个人,一个任务对应一个人,将第j个任务分配给第i个人的成本是C[i,j],求总成本最小的分配方案
    算法期末复习总结_第16张图片

四、递归算法

  1. 减常数因子
  • T(n) = T(n-1) + f(n)
  • T(n) = aT(n/b) + f(n)
    算法期末复习总结_第17张图片

五、分治法

  1. 将一个问题划分为同一类型的若干子问题
  2. 对子问题求解(递归)
  3. 有必要的话,合并子问题的解,得到原答案的解
    算法期末复习总结_第18张图片
  • 通用分治递推式:T(n) = aT(n/b) + f(n)
    算法期末复习总结_第19张图片

5.1 大整数相乘

  • 问题:两个n位的大整数相乘
    算法期末复习总结_第20张图片
    算法期末复习总结_第21张图片
    算法期末复习总结_第22张图片

5.2 Stranssen矩阵乘法

算法期末复习总结_第23张图片
算法期末复习总结_第24张图片
算法期末复习总结_第25张图片

5.3 二分搜索

算法期末复习总结_第26张图片
算法期末复习总结_第27张图片

5.4 归并排序

算法期末复习总结_第28张图片

算法期末复习总结_第29张图片
算法期末复习总结_第30张图片
算法期末复习总结_第31张图片

5.5 快速排序

算法期末复习总结_第32张图片

算法期末复习总结_第33张图片
算法期末复习总结_第34张图片
算法期末复习总结_第35张图片
算法期末复习总结_第36张图片

5.6 棋盘格问题

算法期末复习总结_第37张图片
算法期末复习总结_第38张图片

算法期末复习总结_第39张图片
算法期末复习总结_第40张图片
算法期末复习总结_第41张图片
算法期末复习总结_第42张图片

六、减治法

6.1 减去一个常量

插入排序

算法期末复习总结_第43张图片

  • 最坏:θ(n2)
  • 最好:θ(n)
  • 平均:θ(n2)

拓扑排序

  1. 执行一次DFS,并记住顶点退出栈的顺序,该顺序反过来就是拓扑排序的一个解
    算法期末复习总结_第44张图片
    算法期末复习总结_第45张图片
  2. 减治法:不断取出源(没有输入边的顶点)
    算法期末复习总结_第46张图片
    算法期末复习总结_第47张图片

6.2 减去一个常量因子

二分查找

算法期末复习总结_第48张图片
算法期末复习总结_第49张图片

  • 时间复杂度:logn

假币问题

  • 问题:在n个钱币中找出一个假币
  • 思路:不断分为两堆进行称重(同二分查找)

俄罗斯农民问题

  • 问题:计算n*m
    算法期末复习总结_第50张图片
    算法期末复习总结_第51张图片

6.3 减去的规模是可变的

七、变治法

算法期末复习总结_第52张图片

7.1 实例化简

预排序

  • 寻找唯一的元素
    算法期末复习总结_第53张图片
  • 找mode(出现次数最多)

高斯消去法

算法期末复习总结_第54张图片
算法期末复习总结_第55张图片
算法期末复习总结_第56张图片
算法期末复习总结_第57张图片

堆排序

算法期末复习总结_第58张图片
算法期末复习总结_第59张图片

7.2 改变表现

霍纳法则

算法期末复习总结_第60张图片

7.3 问题化简

线性规划

算法期末复习总结_第61张图片
算法期末复习总结_第62张图片
算法期末复习总结_第63张图片

简化为图

算法期末复习总结_第64张图片

八、回溯法和分支限界法

8.1 DFS

算法期末复习总结_第65张图片
算法期末复习总结_第66张图片

8.2 BFS

算法期末复习总结_第67张图片
算法期末复习总结_第68张图片
算法期末复习总结_第69张图片

8.3 回溯法

算法期末复习总结_第70张图片
算法期末复习总结_第71张图片
算法期末复习总结_第72张图片
算法期末复习总结_第73张图片
算法期末复习总结_第74张图片

0-1背包问题

算法期末复习总结_第75张图片
算法期末复习总结_第76张图片
算法期末复习总结_第77张图片

算法期末复习总结_第78张图片

TSP问题

算法期末复习总结_第79张图片
算法期末复习总结_第80张图片
算法期末复习总结_第81张图片

算法期末复习总结_第82张图片

n皇后问题

算法期末复习总结_第83张图片 算法期末复习总结_第84张图片
算法期末复习总结_第85张图片
算法期末复习总结_第86张图片

8.4 分支限界法

算法期末复习总结_第87张图片
算法期末复习总结_第88张图片
算法期末复习总结_第89张图片

0-1背包问题

算法期末复习总结_第90张图片
算法期末复习总结_第91张图片

算法期末复习总结_第92张图片
算法期末复习总结_第93张图片

算法期末复习总结_第94张图片
算法期末复习总结_第95张图片
算法期末复习总结_第96张图片
算法期末复习总结_第97张图片

算法期末复习总结_第98张图片
算法期末复习总结_第99张图片

装载问题

算法期末复习总结_第100张图片
算法期末复习总结_第101张图片
算法期末复习总结_第102张图片
算法期末复习总结_第103张图片
算法期末复习总结_第104张图片
算法期末复习总结_第105张图片

算法期末复习总结_第106张图片

8.5 方法比较

算法期末复习总结_第107张图片

算法期末复习总结_第108张图片

九、动态规划

算法期末复习总结_第109张图片

  • Bellman原理(最优性原理):求解问题的一个最优策略序列的子策略序列总是最优的

算法期末复习总结_第110张图片
算法期末复习总结_第111张图片
算法期末复习总结_第112张图片

例:

  • Fibinacci
    算法期末复习总结_第113张图片
    算法期末复习总结_第114张图片
    算法期末复习总结_第115张图片
  • 两个重要的适用性质:最优子结构、重叠子问题
    算法期末复习总结_第116张图片

9.1 计算二项式系数

算法期末复习总结_第117张图片
算法期末复习总结_第118张图片
算法期末复习总结_第119张图片

9.2 最长公共子序列(LCS)

算法期末复习总结_第120张图片
算法期末复习总结_第121张图片
算法期末复习总结_第122张图片
算法期末复习总结_第123张图片

9.3 动态矩阵相乘

算法期末复习总结_第124张图片
算法期末复习总结_第125张图片

算法期末复习总结_第126张图片
算法期末复习总结_第127张图片

9.4 0-1背包问题

算法期末复习总结_第128张图片
算法期末复习总结_第129张图片
算法期末复习总结_第130张图片

算法期末复习总结_第131张图片

9.5 多阶段决策问题

算法期末复习总结_第132张图片

Forward

算法期末复习总结_第133张图片

算法期末复习总结_第134张图片
算法期末复习总结_第135张图片
算法期末复习总结_第136张图片
算法期末复习总结_第137张图片

Backward

算法期末复习总结_第138张图片

Warshall(求传递闭包)

算法期末复习总结_第139张图片
算法期末复习总结_第140张图片

算法期末复习总结_第141张图片

Floyd(求最短路径)

算法期末复习总结_第142张图片
算法期末复习总结_第143张图片
算法期末复习总结_第144张图片
算法期末复习总结_第145张图片

9.6 最优性原理的证明

算法期末复习总结_第146张图片
算法期末复习总结_第147张图片
算法期末复习总结_第148张图片

十、贪心技术

  • 思想:一步步的局部最佳策略可能导致一个最优的结果
    在这里插入图片描述

算法期末复习总结_第149张图片
算法期末复习总结_第150张图片
算法期末复习总结_第151张图片

10.1 活动安排问题

算法期末复习总结_第152张图片
算法期末复习总结_第153张图片
算法期末复习总结_第154张图片
算法期末复习总结_第155张图片

10.2 背包问题

算法期末复习总结_第156张图片
算法期末复习总结_第157张图片

10.3 Dijstra算法

在这里插入图片描述

算法期末复习总结_第158张图片

10.4 Prim算法

  • 最小生成树:将所有顶点都连起来,且边的权重最小
  • Prim:当需要新加节点时,选择最短的边加入

算法期末复习总结_第159张图片

10.5 Kruskal算法

  • 将所有边按权重由小到大排序,每次选最小的边,直到所有的顶点都被连起来
    算法期末复习总结_第160张图片

你可能感兴趣的:(note,算法)