[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 查找的主要内容,如果未能解决你的问题,请参考以下文章