python-初始二分法(一)

x33g5p2x  于2021-11-19 转载在 Python  
字(1.0k)|赞(0)|评价(0)|浏览(218)


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)

查找过程图示:

学完的状态!

学完头脑分离···

相关文章