06_python_Sequential Search

本文介绍了Python中的顺序查找算法,包括无序表和有序表两种情况。无序表顺序查找的平均复杂度为O(n/2),而有序表查找虽然在数据项不存在时能提前结束,但整体复杂度仍为O(n)。
摘要由CSDN通过智能技术生成

顺序查找算法

  • 通过下标,可以按照顺序来访问和查找数据项,这种技术称为“顺序查找”
    • 如果数据项保存在如列表这样的集合中,我们会称这些数据项具有线性或者顺序关系
    • 在Python List中,这些数据项的存储位置称为下标(index),这些下标都是有序的整数

  • 要确定列表中是否存在需要查找的数据项
    • 首先从列表的第一个数据项开始,按照下标增长的顺序,逐个对比数据项,如果到最后一个都未发现要查找的项,那么查找失败。

无序表顺序查找

代码

def sequentialSearch(alist, item):
    pos = 0
    found = False
    
    while pos < len(alist) and not found:
        if alist[pos] == item:
            found = True
        else:
            pos = pos + 1  #下标顺序增长
            
    return found

testlist = [1,2,32,8,17,19,42,13,0]
print(sequentialSearch(testlist, 3))
print(sequentialSearch(testlist, 13))
False
True

复杂度分析

  • 为了保证是一般情形,假定列表中的数据项并没有按值排列排序,而是随机放置在列表中的各个位置。(数据项在列表中各处出现的概率是相同的)

  • 算法分析:确定基本计算步骤(这些基本计算步骤必须要足够简单,并且在算法中反复执行)

    • 在查找算法中,这种基本计算步骤就是进行数据项的比对:当前数据项等于还是不等于要查找的数据项
    • 比较的次数决定了算法复杂度:数据项是否在列表中,对比次数是不一样的
      • 若不在列表中,需要对比所有数据项才能得知,比对次数是n
      • 若在列表中,比对次数不一定:最好时第一次比对就找到;最坏时需要n次比对。
      • 因为数据项在列表中各处出现的概率是相同的,所以平均状况下,比对次数是n/2。
  • 综上,顺序查找无序表的算法复杂度是:O(n)
    在这里插入图片描述

有序表顺序查找

  • 有序表的顺序查找
    • 当数据项存在时,比对过程与无序表完全相同
    • 不同之处在于,如果数据项不存在时,比对可以提前结束

代码

def orderedSequentialSearch(alist, item):
    pos = 0
    found = False
    stop = False
    
    while pos < len(alist) and not found and not stop:
        if alist[pos] == item:
            found = True
        else:
            if alist[pos] > item:
                stop = True  #提前退出
            else:
                pos = pos + 1
            
    return found

testlist = [0,1,2,8,13,17,19,32,42]
print(orderedSequentialSearch(testlist, 3))
print(orderedSequentialSearch(testlist, 13))
False
True

复杂度分析

  • 顺序查找有序表的算法复杂度为:O(n)
    • 只有当数据项不存在的时候,有序表的查找能节省一些比对次数,但是并不改变其数量级
      在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值