当前位置:   article > 正文

二分查找法最大最小比较次数_14个元素二分查找失败最小次数

14个元素二分查找失败最小次数

Content

  • 实现过程
  • 关键思路
  • 最大最小比较次数
  • Python实现
  • ?线性查找法

1. 实现过程

Example:

在顺序表 [10,20,30,40,50,60,70] 中,用二分法查找关键码60。

数值1020304050607080
下标01234567

以上8个数,从0到7编码,查找过程如下:

  • 第一轮
    mid =(left + right)/ 2 = (0 + 7) / 2 = 3 ,「向下取整」
    -> 目标值60与下标为3的值40进行比较,40<60,则 left = mid + 1 = 4;

  • 第二轮
    mid = (left + right)/ 2 = (4+7) /2 = 5,「向下取整」
    -> 目标值60与下标为5的60比较,60=60,返回下标5,算法结束。

共比较了2次。


2. 关键思路

  • 使用二分查找前,必须先保证数组有序;
  • 每次二分按照 mid=(left + right)/ 2向下取整;
  • 目标值与下标为mid的值比较,若目标值较大(小),则left = mid + 1right = mid - 1);
  • 直至成功找到目标值,停止。

3. 最大最小比较次数

  • 最小比较次数为1,例如[1,2,3]二分查找2。

  • 最大比较次数为log2(n) + 1 向下取整,

对有序表,根据二分查找法定义,每次比较之后问题规模都会减小一半,所以2^k=N,解得k=log2(n)。又因为最后只剩一个元素时,也要执行查找过程,所以+1。


4. Python实现

def BinarySearch(arr, key):
    left = 0
    right = len(arr)-1
    
    while left <= right:
        mid = (left + right)//2
        if key == arr[mid]:
            return mid
        elif (key < arr[mid]):
            right = mid - 1
        else:
            left = mid + 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 输出:

在这里插入图片描述


5. vs 线性查找

在无序的数组中查找一指定值,必须遍历整个数组,直至查找成功。

  • 最小查找次数为1,即第一个值即为目标值;
  • 最大查找次数为n,即最后一个值才是目标值;
  • 平均查找次数为(n+1)/2,即(1+2+3+……+n)/n 。

6. 参考

  • https://blog.csdn.net/u010992313/article/details/89373480
  • https://blog.csdn.net/iteye_3748/article/details/82677136
  • https://blog.csdn.net/picc_lu/article/details/97247031
  • https://www.baidu.com/link?url=dG930Wgj8gRWERgRMXzzoKxPItF2QochfTZlqSR2kqZFdbUavWeSwOqNw8ckQfQB&wd=&eqid=ba0f797b000cb42a000000065d774886
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/624564
推荐阅读
相关标签
  

闽ICP备14008679号