day4 数据结构与算法----- 搜索算法(2)

本文深入探讨了顺序搜索(或称线性搜索)的概念,包括其在Python中的实现方式,以及在不同场景下的性能表现。文章详细分析了顺序搜索在最好情况、最坏情况和平均情况下的时间复杂度,为读者提供了全面的理解。

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

顺序搜索一个列表,并讨论搜索过程中的最好情况,最坏情况和平均情况的性能

python 中的 in 运算符作为 list 类中名为__contains__的一个方法而实现的。这个方法在列表中搜索一个特定的项(叫做目标项)。
在这样一个列表中搜索一个目标项的唯一的方法是,从第 1 个位置的项开始,将其与目标项进行比较。如果这两个项相等,该方法返回True。否则,该方法移动到下一个位置继续比较。如果该方法到达了最后一个位置,却仍然没有找到目标项,它就返回False。这种搜索叫做顺序搜索(sequential search)或线性搜索(linear search)。
算法实现:

def shunxusousuo(target,lists):
    position = 0
    while position < len(lists):
        if target == lists[position]:
            print(position)
        position += 1
    return -1


list1 = [1,2,3]
shunxusousuo(3,list1)

嗯。。。当然啦,在搜索的过程中总会发生运气很好的事情(比如说第一个位置的元素就与目标值一致),也会发生运气很不好的事情(比如说在列表的最后一个位置才搜索到与目标值一致的元素,或者一个一致的元素都没有)。
所以,对在顺序搜索的分析要考虑如下3中情况:

  1. 在最坏的情况下,目标项位于列表的末尾,或者根本就不在列表中。那么,算法必须访问每一个项,并且对大小为n的列表要执行n次迭代。因此,顺序搜索的最坏情况的复杂度为O(n);
  2. 在最好的情况下,算法只进行了1次迭代就在第1个位置找到目标项,复杂度为O(n);
  3. 在平均的情况下,要把每一个可能的位置找到目标项所需的迭代次数相加,并且用总和除以n。因此,算法执行了(n+n-1+n-2+n-3+n-4+n-5+······+1)/n次的迭代。简化式子为(n+1)/2。对于很大的n,常数因子2的作用并不大,因此,平均情况下的复杂度仍然为O(n)。

所以综上所述,顺序搜索的最好情况的性能是很少见的,而平均情况和最坏情况的性能则基本相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值