python-初识二分法(一)
二分法
1、二分法核心图
2、二分法算法应用实例
- 二分法是一种搜索效率比较高的算法,每次搜索会把范围缩小一半,最终获取到想要的结果
二分法基础运用,实例1如下:
import random
# 获取100以内的随机数
start_num =0
end_num = 100
while True:
real_num = random.randint(0,100)
num = int(input('please input your guess num>>>>:'))
if num>real_num:
end_num = num
print(f'to big,范围是{start_num}~{end_num}')
elif num < real_num:
start_num = num
print(f'to small,范围是{start_num}~{end_num}')
else:
print('guess right!')
break
'''这个猜数字游戏,很好的运用了二分法的思想,
如果猜大了,那么就把输入的值当做范围的上限,
如果猜小了,那么就把输入值当做范围的下限'''
实例2如下:
# 用二分法在列表搜索值321,二分法查找必须有序
l = [11, 23, 43, 57, 68, 76, 81, 99, 111, 123,
321, 432, 567, 666, 712, 899, 999, 1111]
# 排序
l.sort()
def binary_target(target_num, l):
if len(l) == 0:
print('没找到')
return
# 先获取中间位置索引值
middle_index = len(l) // 2
# 判断中间索引对应的值比目标值大还是小
if target_num > l[middle_index]:
# 说明要找的元素只可能出现在列表的右侧
l_right = l[middle_index + 1:]
print(l_right)
binary_target(target_num, l_right)
elif target_num < l[middle_index]:
# 说明要找的元素只可能出现在列表的左侧
l_left = l[:middle_index]
print(l_left)
binary_target(target_num, l_left)
else:
print('找到了', target_num)
binary_target(321,l)
查找过程图示:
学完的状态!
学完头脑分离···