算法原理复习提纲(1)

1 介绍

2 数学基础(一定考)

2.1 复杂度函数的阶

2.2 常用不等式

在这里插入图片描述

2.2 递归方程的求解

  • 迭代法
  • 数学归纳法
  • 主定理法
    在这里插入图片描述
    变量代换
    在这里插入图片描述
    注意特例
    在这里插入图片描述

3 分治法

重点掌握用分治法求解问题

  • 分解divide->解决conquer->合并merge
    在这里插入图片描述
  • 归并排序
  • 大整数乘法
    在这里插入图片描述
    对于长度是n/2的乘法,只需要进行3次即可
    在这里插入图片描述
  • 快速矩阵相乘Strassen算法
    对于矩阵乘法,本来是O(n3)的时间复杂度,定义10个部分和、7个部分积,拆成7个n/2*n/2的矩阵相乘
    在这里插入图片描述
  • 最近点对问题
    利用鸽巢问题和下面的定理,merge阶段每个点最多只需要计算和6个点的距离即可
    在这里插入图片描述
  • 凸壳问题
    转化成极坐标->按极角大小排序->利用栈判定是否出现在三角形内部
  • 快速傅里叶变换
    时域抽选,频域对大于N/2和小于N/2两种情况进行归并
  • 线性时间选择算法
    找划分点,将集合分成大于k、等于k、小于k三部分,问题在于如何均匀的选取划分点??
    递归调用本算法来求中位数
    在这里插入图片描述

4 动态规划

动态规划是典型的以空间换时间的时空权衡策略,要考虑状态空间的大小,当状态空间巨大时,动态规划算法的效率很低
优化子结构:原问题的优化解包含了子问题的优化解
重叠子问题:求解问题时需要重复求解子问题

  • 钢条切割问题
  • 流水线优化调度问题
  • 0/1背包问题
    在这里插入图片描述
    在这里插入图片描述
  • 矩阵链乘法问题
    在这里插入图片描述
    对递归方程的理解是对矩阵链切一刀,将其分成两个地方分别计算,可以切在1~n-1个地方
    如何求解递归方程??
    卡特兰数的定义为:C(n)= C(0)*C(n-1) + C(1)*C(n-2) + … + C(n-1)C(0),求解出
    在这里插入图片描述
    所有队员矩阵链乘法的递归方程,求解结果是第n-1个卡特兰数
  • 凸多边形三角剖分
    递归方程:
    在这里插入图片描述
  • 最长公共子序列问题
    子序列元素不一定非要连续,只要下标严格递增就好
  • 最优二叉搜索树问题
    在这里插入图片描述

5 贪心法:

  • 重点在于贪心算法的使用条件,掌握贪心算法求解优化问题
    核心在于通过局部最优选择得到全局最优结果,可是为什么一定对呢?
  • 贪心选择性质
  • 优化子结构
    所以算法的正确性证明包括:贪心选择性质+优化子结构+数学归纳法
  • 活动选择问题
  • 霍夫曼编码
  • 最小生成树:Kruskal算法和Prim算法
  • 单源最短路径:dijkstra算法
  • 城堡守卫问题->圆弧覆盖问题->直线覆盖问题->活动选择问题

6 概率分析(和随机算法结合到一起去考)

  • 雇佣问题
    在这里插入图片描述
    利用指示器随机变量,Xi表示第i个面试者被雇佣,X表示面试过程中被雇佣的人数
    在这里插入图片描述
    在这里插入图片描述
  • 随机排列数组1:用随机生成的数组P作为sort key进行排序
    在这里插入图片描述
  • 随机排列数组2:随机交换两个元素
    在这里插入图片描述
  • 生日悖论:屋子内人数必须达到多少人,才能使两个人生日相同的机会达到50%
    方法一:
    假设有k个人,求两个人生日不一样的概率:
    (1-1/n)(1-2/n)…[1-(k-1)/n]<=e-1/ne-2/n…e-(k-1)/n=e-k(k-1)/2n<=1/2
    k>=23
    方法二:设随机变量X表示生日相同的人的对数
    在这里插入图片描述
    在这里插入图片描述
  • 球和箱子:b个箱子,每次投球球等可能的落入其中一个箱子中,要使每个箱子中至少有一个球,需要投球多少次
    (礼券收集者问题:收集多少张礼券才能集齐b种礼券)
    设随机变量ni表示第i-1次命中到第i命中之间投球的次数,第i阶段投中成功的概率是(b-i+1)/b,所以E[ni]=b/(b-i+1)
    在这里插入图片描述
  • 特征序列:投一个标准硬币n次,最长连续正面的序列的期望长度
    在这里插入图片描述
  • 在线雇用问题:面试并拒绝前k个应聘者,再雇佣其后比前面k个应聘者分数更高的第一个应聘者。最佳k值约为0.37n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值