zoukankan      html  css  js  c++  java
  • 算法之二分法

    什么是算法:

    算法:是高效解决问题的办法

    二分法应用场景

    # 需求:有一个按照从小到大顺序排列的数字列表
    # 需要从该数字列表中找到我们想要的那个一个数字
    # 如何做更高效???
    nums=[-3,4,13,10,-2,7,89]
    find_num=10
    nums.sort()
    
    # 方案一:整体遍历效率太低
    for num in nums:
        if num == find_num:
            print('find it')
            break
    
    # 方案二:二分法
    def binary_search(find_num,列表):
        mid_val=找列表中间的值
        if find_num > mid_val:
            # 接下来的查找应该是在列表的右半部分
            列表=列表切片右半部分
            binary_search(find_num,列表)
        elif find_num < mid_val:
            # 接下来的查找应该是在列表的左半部分
            列表=列表切片左半部分
            binary_search(find_num,列表)
        else:
            print('find it')
    
    #优化
    nums=[-3,4,7,10,13,21,43,77,89]
    find_num=8
    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)
  • 相关阅读:
    ARM的存储器映射与存储器重映射
    Nand Flash与Nor
    内核 任务的堆栈切换
    Linux设备模型(总结)
    file结构体中private_data指针的疑惑
    Sysfs文件系统与Linux设备模型
    认识udev
    Linux操作系统下的常见系统资源共享
    linux下的udev是干嘛的,能否说的通俗点
    udev详解
  • 原文地址:https://www.cnblogs.com/baicai37/p/12573876.html
Copyright © 2011-2022 走看看