[DS+Algo] 008 查找

Posted yorkyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[DS+Algo] 008 查找相关的知识,希望对你有一定的参考价值。

1. 常见搜索方法

  • 顺序查找
    • 最优时间复杂度:O(1)
    • 最坏时间复杂度:O(n)
  • 二分法
    • 最优时间复杂度:O(1)
    • 最坏时间复杂度:O(logn)
  • 二叉树
    • 若是“二叉搜索树”
      • 最优时间复杂度:O(1)
      • 最坏时间复杂度:O(logn)
  • 哈希
    • 时间复杂度:O(1)

2. 二分查找的代码实现

  • 顺序查找,就是一个循环遍历
  • BST,其实和二分换汤不换药
  • 哈希,暂且按下不表

代码实现

from random import randrange


def binary_search_1(lst, item):
    first = 0
    last = len(lst) - 1
    while first <= last:
        mid = (first + last) // 2
        if lst[mid] == item:
            return True
        elif item < lst[mid]:
            last = mid - 1
        else:
            first = mid + 1
    return False


def binary_search_2(lst, item):
    n = len(lst)
    if n == 0:
        return False

    mid = n // 2
    if lst[mid] == item:
        return True
    elif item < lst[mid]:
        return binary_search_2(lst[:mid], item)
    else:
        return binary_search_2(lst[mid+1:], item)


if __name__ == "__main__":
    lst = [i+randrange(0, 5) for i in range(0, 100, 5)]
    r_num = randrange(0, 100)

    print("lst =", lst)
    print(f"binary_search_1(lst, {r_num}):", binary_search_1(lst, r_num))
    print(f"binary_search_2(lst, {r_num}):", binary_search_2(lst, r_num))

以上是关于[DS+Algo] 008 查找的主要内容,如果未能解决你的问题,请参考以下文章

[DS+Algo] 003 一维表结构 Python 代码实现

c_cpp dsahapersonal_algo_ds

algo&ds2.线性表

algo&ds8.最小生成树

algo&ds7.最短路径问题

algo&ds5.图及其存储结构遍历