码迷,mamicode.com
首页 > 其他好文 > 详细

[DS+Algo] 008 查找

时间:2019-12-05 21:46:52      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:顺序   二叉树   port   and   pytho   random   def   last   print   

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 查找

标签:顺序   二叉树   port   and   pytho   random   def   last   print   

原文地址:https://www.cnblogs.com/yorkyu/p/11992068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!