zoukankan      html  css  js  c++  java
  • DSA——二分查找笔记【及其变种】

    //发现一个非常**的问题,终于明白为什么有时候看别人的代码会出现不明符号了,,我也出现了···不过反正我从来不看首页看我的笔记,都是从后台看···吼吼吼

    //循环实现

    确定该期间的中间位置K
    将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找

    public int BinarySearch(int[] array, int T)
            {
    if(a==null||low>high)
    return -1; int low, high, mid; low = 0; high = array.Length - 1; while (low <= high)//必须是带等于,可以是一个元素 { mid = (low + high) / 2; if (array[mid] < T) { low = mid + 1; } else if (array[mid]>T) { high = mid - 1; } else { return mid; } } return -1; }
    //递归实现
    int BinSearch(int Array[],int low,int high,int key)  
    {  
    //边界检查 if (low<=high) { int mid = (low+high)/2; if(key == Array[mid]) return mid; else if(key<Array[mid]) //移动low和high return BinSearch(Array,low,mid-1,key); else if(key>Array[mid]) return BinSearch(Array,mid+1,high,key); } else return -1; }

      计算复杂度:--------对于循环来说--就是看循环的次数呗

    循环次数 :

    第一次循环:n--------n代表的是,在当前循环中,有n个元素参与这项活动,这句话的意思不是说每个元素都顾及到了,而是说当前循环的 元素处于 n个元素中间

    第二次:n/2

    第三次:n/4

    ·

    ·

    ·

    第k次:n/2^k-------同理代表的是,在当前循环中,有n/2^k元素参与这项活动,这句话的意思不是说每个元素都顾及到了,而是说当前循环的进行比较的元素a[mid]处于 n/2^k个元素中间

    而在最后一次比较中,一定只有>=1个元素,所以可知

    最后n/2^k一定是>=1的,令等于1,所以k=log(n)

    变种二分查找:

      ·插值查找http://blog.csdn.net/u011116672/article/details/50196139

      ·斐波那契查找【也称作是 仅使用 加减法实现二分查找的算法 (然而并不明白别的算法除了加减法还用到别的了么??)】看http://www.cnblogs.com/bethunebtj/p/4839576.html

    ###4.26复习,注意到了边界检查鼓掌! 遗漏点low<=high--------可以是一个元素。

    &&感悟:看过斐波那契,突然明白过来,不论是哪种二分查找,都是在已知的多少个元素中进行查找,并且这些已知的数目的元素的值都知道

    对斐波那契来说:n-(F(k-1))= F(k)-1   -   F(k-1)   =   F(k)  - F(k-1)-1  =    F(k-2)-1------这是右侧的元素个数 k-=2得到的

    F(k-1)-1---则是左侧元素的个数

    而普通的则是 mid-1-low========左侧元素个数

    high-(mid+1)========右侧元素个数

  • 相关阅读:
    BestCoder Round #86 1001
    Codeforces Round #365 (Div. 2) B
    Codeforces Round #365 (Div. 2) A
    Codeforces Round #129 (Div. 2) C
    Codeforces Round #129 (Div. 2) B
    Android.mk 文件语法详解
    RDS和ROS使用小结
    电力企业计量生产需求系统解决方案
    android 修改framework下资源文件后如何编译
    USB port 如何识别不同的Charger类型
  • 原文地址:https://www.cnblogs.com/Cherrylalala/p/6476354.html
Copyright © 2011-2022 走看看