算法丨二分查找
Posted One丨Python
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法丨二分查找相关的知识,希望对你有一定的参考价值。
二分查找
二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回Null。
示例
- 1~100的数字,以最少的次数猜到玩家想的数字。每次猜的时候玩家会提示小了、大了或者是对了,
这是简单查找,每次猜测都只能排除一个数字。
更加的查找方式
从50开始
小了,但是排除了一半的数字。
这就是二分查找,每次猜测排除的数字个数如下:
不管玩家心里想的哪个数字,都可以在7次之内猜到。
如果要在字典中查找一个单词,而字典包含240000个单词,使用二分查找仅用17步,对于包含n个元素的列表,用二分查找最多需要log2n步。
二分查找的Python代码
将一系列元素存储在一系列相邻的桶(bucket),即数组中(后续会介绍数组)。这些桶从0开始编号:第一个桶的位置为#0,第二个桶的位置为#1,第三个桶为#2,以此类推。
函数binary_search接受一个有序数组和一个元素。如果指定的元素包含在数组中,这个函数将返回其位置。
首先要跟踪其中查找的数组部分,开始时为整个数组。
low = 0
high = 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
以上是关于算法丨二分查找的主要内容,如果未能解决你的问题,请参考以下文章