zoukankan      html  css  js  c++  java
  • 折半搜索法

    今天开始准备学习搜索相关的算法,首先从折半搜索【也叫二分搜索binary search】开始,这个也是比较简单比较容易理解的,先来看下它的定义:

     光文字有些抽象,下面用图来表示整个折半查找的全过程:
           

    对于这样一组数列,比如要查询7这个元素,它的过程如下:

    于是乎数据就变成了:
          

    从这一步是不是就能体现出折半搜索的效率,顺意就将数据砍掉剩一半了,也就是数据范围一下就缩小了,所以查找效率就高了。下面则继续以此规则进行进一步递归【所以用递归实现是首先能想到的实现办法】

    这时再从剩下的元素【7、9、11】中取出中间元素【9】继续类比:
                    

                     

    只剩最后一个7了,取中间还是它,最后发现跟7相等于是乎就找到了该数,整个查询结束。 

    有了上面的思想之后,下面来具体实现一下,比较简单,这里就不多解释了,基础代码:

    具体折半的实现如下:

    编译运行:

    下面更改一下测试用例,测一下其它情况看程序是否完美:

    看结果:

    可见程序是完美的,下面来看一下它的时间复杂度:

     

    而方法中其它的一些语句木有要所数组循环的东东,所以是O(1)级别的,所以:

    T(n) = T(n/2) + O(1),根据主定理可以得出它其实是O(log n),非常高效了~

  • 相关阅读:
    【模板】高斯消元
    【洛谷P1730】最小密度路径
    【模板】矩阵乘法优化线性递推
    【洛谷P3723】礼物
    【洛谷P3338】力
    【模板】NTT
    【洛谷P1919】A*B Problem升级版
    测试理论基础(思维导图)
    Fiddler
    常用 Linux 命令
  • 原文地址:https://www.cnblogs.com/webor2006/p/7182756.html
Copyright © 2011-2022 走看看