L3:查找

查找

  • 意思:在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程
  • 列表查找(线性表查找):从列表中查找指定元素
    • 输入:列表、待查找元素
    • 输出:元素下标(未找到时一般返回None或-1)
  • 内置列表查找函数:index()

顺序查找(Linear Search)

  •  意思:也叫线性查找,从列表的第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表的最后一个元素为止
  • 时间复杂度O(n)

代码:

def linear_search(li, val):
    for ind, v in enumerate(li):
        if v == val:
            return ind
    else:
        return None

enumerate()函数

enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。

enumerate(sequence, [start=0])
  •  sequence -- 一个序列、迭代器或其他支持迭代对象
  • start -- 起始下标的值

二分查找(Binary Search)

  •  意思:又叫折半查找,从有序列表的初始候选区li[0:n]开始,比较待查找的值与候选区中间值,可以使候选区减少一半
  • 时间复杂度O(logn)

代码:

def binary_search(li, val):
    left = 0
    right = len(li)-1
    while left <= right:
        mid = (left + right) //2
        if li[mid] == val:
            return mid
        elif li[mid] > val:
            right = mid -1
        elif li[mid] < val:
            left = mid + 1
    else:
        return None
上一篇:【解题报告】洛谷 P4753 River Jumping


下一篇:Self-Assembly(UVA - 1572)(例题6-19)