Python常见查找算法

本文详细介绍了Python中的几种查找算法,包括顺序查找、二分查找、插值查找、斐波那契查找等。针对不同情况,这些算法有不同的适用性和效率。例如,二分查找适用于有序列表,插值查找在关键字分布均匀时表现更优,而哈希查找提供快速的O(1)查找速度。此外,还提到了分块查找和二叉查找树等其他查找方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.关键字定义
查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。
查找表(Search Table):由同一类型的数据元素构成的集合
关键字(Key):数据元素中某个数据项的值,又称为键值
主键(Primary Key):可唯一的标识某个数据元素或记录的关键字

2.查找表按照操作方式可分为:
①静态查找表
a)查询某个“特定的”数据元素是否在表中
b)检索某个“特定的”数据元素和各种属性
②动态查找表
a)查找时插入数据
b)查找时删除数据

3.按查找的数据可分为:
①无序查找
也就是数据不排序的线性查找,遍历数据元素
②有序查找
查找表中的数据必须按某个主键进行某种排序!

4.顺序查找/线性查找(无序)
①定义
顺序查找又称为线性查找,是一种最简单的查找方法。适用于线性表的顺序存储结构和链式存储结构。该算法的时间复杂度为O(n)。
②基本思路
因为时无序的,所以没有任何的计算规则,只能从头到末尾,一个个遍历。
从第一个元素m开始逐个与需要查找的元素x进行比较,当比较到元素值相同(即m=x)时返回元素m的下标,如果比较到最后都没有找到,则返回-1。
③优缺点
优点:是对表中数据元素的存储没有要求
缺点:是当n 很大时,平均查找长度较大,效率低
④算法实现

#线性查找/顺序查找
def linear_search(list,key):
    result ={}
    for i in range(len(list)):
        if list[i] == key:
            result["iddex"] = i
            result["value"] = key
    return result

5.二分法查找(有序)
①算法简介:
二分查找(Binary Search),是一种在有序数组中查找某一特定元素的查找算法。查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。
这种查找算法每一次比较都使查找范围缩小一半。
②算法描述
给与一个有序的列表
1.取列表索引的最小索引low和最大的索引high,然后算平均值mid
2.把查找的key与list[mid]比较
3.如果key大于list[mid],则key在list[mid]和list[high]之间,low=mid-1,继续切片list,重复1,2步骤
4.如果key小于list[mid],则key在list[low]和list[mid]之间,high=mid+1,继续切片list,重复1,2步骤
5.如果key等于list[mid],则找到key
③算法实现

#二分查找
def binary_searcH(list,key):
    print(list,key)
    result ={}
    low = 0
    high = len(list)-1
    times = 0
    while low <high:
        times +=1
        mid = int((low+high)/2)
        print(mid,times)
        if key < list[mid]:
            high = mid -1
        elif key > list[mid]:
            low = mid +1
        else:
          result["index"] = list[mid]
          result["value"] = key
          return result
    else:
        print('total times:', times)
        return result

6.插值查找(有序)
①算法简介
插值查找是根据要查找的关键字key与查找表中最大最小记录的关键字比较后的 查找方法,其核心就在于插值的计算公式 (key-a[low])/(a[high]-a[low])*(high-low)。
时间复杂度o(logn)但对于表长较大而关键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值