查找

作者: 小吉头 | 来源:发表于2020-11-07 20:25 被阅读0次

顺序查找

也叫线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止

#查找某个元素的下标
def linear_search(data_list,val):
    for index,v in enumerate(data_list):
        if v == val:
            return index
    else:
        return None

print(linear_search(['a','b','c'],'c'))

时间复杂度:O(n)

二分查找

也叫折半查找,从有序列表的初始候选区list[0:n]开始,比较目标值和候选区中间值,使候选区减少一半。时间复杂度logn

  • 方法1
def bin_search(li,val):
    """
    :param li: 源数组
    :param val: 目标值
    :return: 目标值的下标,未找到返回None
    """
    low = 0
    high = len(li) - 1
    while low <= high:
        mid = (low + high) // 2
        if li[mid] == val:
            return mid
        elif li[mid] < val:
            low = mid + 1
        else: # li(mid) > val
            high = mid - 1
    return None

关键词:有序列表、候选区(low~high之间)、low和high的关系
bin_search([1,2,3,4,5],3.5),初始图:

image.png
此时mid=2,第一次比较后low=3

此时mid=3,第二次比较后high=3

此时mid=3,第三次比较后high=2,这时候选区已经空了,所以终止条件是while low <= high

假设要找的目标值是4.5,只有最后一步不同,候选区还是空了,所以条件还是while low <= high
  • 方法2,使用递归方式
def bin_search_rec(li,val,low,high):
    if low <= high:
        mid = (low + high) // 2
        if li[mid] == val:
            return mid
        elif li[mid] > val:
            return bin_search_rec(li,val,low,mid - 1)
        else:
            return bin_search_rec(li,val,mid + 1,high)
    else:
        return None

总结

在python一些常用的查找比如val in listlist.index()str.find()都是线性查找,因为源数据不一定是有序的,所以没法用二分查找

相关文章

  • 《数据结构与算法》知识点(四)

    第七章 查找 顺序查找、折半查找、索引查找、分块查找是静态查找,动态查找有二叉排序树查找,最优二叉树查找,键树查找...

  • 查找

    静态查找顺序查找 折半查找 散列查找 动态查找二叉排序树 散列查找 ASL(平均查找长度) - 衡量查找算法效率的...

  • PHP查找算法

    静态查找 顺序查找 折半查找 递归折半查找

  • 6.1 查找算法_基础

    1. 查找基本概念 查找:只有两种情况,查找成功,查找失败 查找表:查找的数据集合称为查找表 静态查找表 / 动态...

  • 据结构与算法学习-查找与二叉排序树

    查找表操作方式分为静态查找和动态查找。静态查找表(Static Search Table): 只作查找操作的查找表...

  • iOS-字符串查找

    字符串查找通常有四种方式,暴力查找,KMP查找,BoyerMoore查找以及RabinKarp算法查找,查找最简单...

  • linux 查找目录或文件

    查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) ...

  • Linux查找文件、文件夹

    查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) ...

  • linux常用命令

    查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) ...

  • linux查找文件夹、文件

    查找目录:find /(查找范围) -name '查找关键字' -type d 查找文件:find /(查找范围)...

网友评论

      本文标题:查找

      本文链接:https://www.haomeiwen.com/subject/pxxbvktx.html