算法丨二分查找

Posted One丨Python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法丨二分查找相关的知识,希望对你有一定的参考价值。

This browser does not support music or audio playback. Please play it in Weixin or another browser. 算法丨二分查找


二分查找


二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回Null。


示例


- 1~100的数字,以最少的次数猜到玩家想的数字。每次猜的时候玩家会提示小了、大了或者是对了,


算法丨二分查找

这是简单查找,每次猜测都只能排除一个数字。


更加的查找方式


从50开始

小了,但是排除了一半的数字。


这就是二分查找,每次猜测排除的数字个数如下:

不管玩家心里想的哪个数字,都可以在7次之内猜到。


如果要在字典中查找一个单词,而字典包含240000个单词,使用二分查找仅用17步,对于包含n个元素的列表,用二分查找最多需要log2n步。



二分查找的Python代码


将一系列元素存储在一系列相邻的桶(bucket),即数组中(后续会介绍数组)。这些桶从0开始编号:第一个桶的位置为#0,第二个桶的位置为#1,第三个桶为#2,以此类推。


函数binary_search接受一个有序数组和一个元素。如果指定的元素包含在数组中,这个函数将返回其位置。


首先要跟踪其中查找的数组部分,开始时为整个数组。

low = 0high = len(list) - 1


然后每次都检查中间的元素

mid = (low + high) // 2 # 如果(low + high)不是偶数,Python自动向下取整guess = list(mid)


如果猜的数字小了,就相应的修改low。如果猜的数字小了,就修改high。

if guess < item: low = mid + 1


完整代码如下

def binary_search(list, item): low = 0    high = len(list) - 1    while low < high:  # 只要范围没有缩小到只包含一个元素,就检查中间元素        mid = (low + high) // 2        guess = list(mid)        if guess == item:         return mid        elif guess > item:         high = mid - 1        else:         low = mid + 1    return None 


以上是关于算法丨二分查找的主要内容,如果未能解决你的问题,请参考以下文章

算法知识常用算法详解丨二分查找法(折半查找)

什么是二分查找算法?丨CSDN编程百科

数据结构与算法二分法丨有序数组中二分法的使用

静态查找算法 - 顺序查找二分查找插值查找斐波那契查找

PHP实现二分查找算法(代码详解)

「算法笔记」一文摸秃二分查找