2、综合案例

 

一、课程目标

1.逆序对及应用
2.学会应用排序算法
3.理解单调队列及应用
4.理解二分法

二、目标详解

1.逆序对

设 A 为一个有 n 个数字的有序集 (n>1),其中所有数字各不相同。如果存在正整数 i, j 使得 1 ≤ i < j ≤ n 而且 A[i] > A[j],则 <A[i], A[j]> 这个有序对称为 A 的一个逆序对,也称作逆序数。使用归并排序算法来求逆序对数最常用的方法,当然在应用逆序对时,需要分解题目解题步骤,运用逆序对来求解。

2.单调队列

单调队列,指有序的队列,递增或递减的队列,没错,可以理解为排完序的结果。我们回想归并排序,在合并的时候就是对两组单调队列的操作。因此在我们解题的过程中,我们要充分利用队列是否具有单调性这个特性,如果具有单调性,我们就能高效的对其进行合并操作。因此单调队列不仅是输出结果,也可能是中间过程必须要产生的临时数据,这个临时数据往往就是临时空间的应用,会大大提升算法的时间复杂度,最原始的归并排序就是中间分开形成小的单调队列,然后不断合并单调队列的过程。这个最根本的思路要进一步扩展开来,根据题目的要求和数据的特征,充分利用队列的单调性,优化算法。

3.二分法

题刷多了,大致上能总结出来,出现某某最大里求最小的这类的描述,基本上就得上二分法。二分法需要满足两个条件,一个是有界,一个是单调。有界就是有边界值,比如某个数字范围,单调指单调队列,队列已排好序。比如我们的字典,a是左边界,z是右边界,总是a-z排好序,是典型的能使用二分法的案例。实际上我们在生活中就是用二分法定位某个要查找的词,如果给你一本无序的字典,让你一页一页找,那个是枚举算法。如果给的数据有英汉字典这个数量级,用枚举和用二分法的效率差别我们是可以想像的。给你一个叫bee的单词,我们大概是这样的一个操作过程,先翻到大概中音的位置,可能是m,你发现b<m,继续往前翻到g,b<g,继续往前翻c,b<d,继续往前翻就定位到b了,可以继续定位bee..。当然因为你对可能第一次就大概知道b的位置,可能实际的次数可能会更少。这个过程就是二分法定位的过程,就是最大里求最小/最小里求最大/或最什么情况下求最优。

之所以把二分法放在排序里,是因为它是对单调队列的一种典型应用,是算法应用的典型。这里需要区分的是像快排里,也是右左开弓循环,按这里的定义,那个应该不算二分法。二分法应该是对已排好序、有边界队列的某种业务进行递归或递推业务的算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值