• Python正课46 —— 二分法


    本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12572422.html

    一:算法

    是高效解决问题的办法

    用于某种特定的场景

    二:算法之 二分法

    需求:有一个按照从小到大顺序排列的数字列表,需要从该数字列表中找到我们想要的那个数字,如何做更高效???

    方案1:整体遍历,效率太低

    nums = [-3,4,7,10,13,21,43,77,89]
    
    find_num = 10
    
    for num in nums:
        if num == find_num:
            print('find it')
            break
    

    方案2:二分法

    # 思路
    # def binary_search(find_num,列表):
    #     mid_value = 找列表中间的值
    #     if find_num > mid_value:
    #         # 接下来的查找应该是列表的右半部分
    #         # 列表 = 列表切片 切出右半部分
    #         # 本身的代码(列表)
    #         binary_search(find_num,列表)
    #     elif find_num < mid_value:
    #         # 接下来的查找应该是列表的左半部分
    #         # 列表 = 列表切片 切出左半部分
    #         # 本身的代码(列表)
    #         binary_search(find_num,列表)
    #     else:
    #         print('find it')
    
    nums = [-3, 4, 7, 10, 13, 21, 43, 77, 89]
    
    find_num = 10
    
    def binary_search(find_num, l):
        print(l)
        if len(l) == 0:
            print('找的值不存在')
            return
        mid_index = len(l) // 2
    
        if find_num > l[mid_index]:
            # 接下来的查找应该是列表的右半部分
            # 列表 = 列表切片 切出右半部分
            l = l[mid_index + 1:]
            # 本身的代码(列表)
            binary_search(find_num, l)
        elif find_num < l[mid_index]:
            # 接下来的查找应该是列表的左半部分
            # 列表 = 列表切片 切出左半部分
            l = l[:mid_index]
            # 本身的代码(列表)
            binary_search(find_num, l)
        else:
            print('find it')
    
    
    binary_search(find_num, nums)
    
  • 相关阅读:
    importToMbtiles
    http-server服务跨域设置
    Leaflet 测试加载高德地图
    矢量切片
    zigzag方式编码
    CentOS7安装docker
    CentOS7安装NodeJS
    CentOS7上Python3.5安装
    JDK8下maven使用maven-javadoc-plugin插件报错
    Ubuntu16.10上安装NodeJS6.9.2
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/12572422.html
Copyright © 2020-2023  润新知