[基础算法]二分查找Binary Search
Posted 极客见闻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[基础算法]二分查找Binary Search相关的知识,希望对你有一定的参考价值。
二分查找
Binary Search是在排序数组中查找指定元素的一种搜索算法。
如下图所示:
查找数字7
1. 将数组中间的元素14与7比较,由于7 < 14, 目标在左边的一半
2. 将剩余部分中间元素6与7比较,由于6 < 7, 目标在右边的一半
3. 沿着图中箭头,不断的把问题缩小一半,直到找到目标
时间复杂度分析
二分查找相当于通过O(1)的执行时间(大小比较操作),把问题缩小一半
T(N) = T(N/2) + O(1)
= (T(N/4) + O(1)) + O(1)
= ((T(N/8) + O(1)) + O(1)) + O(1)
...
= T(1) + logN * O(1)
= O(logN)
实现
def binary_search(self, nums, target):
if nums is None or len(nums) == 0:
return -1
start = 0
end = len(nums) - 1
while(start + 1 < end):
mid = start + (end - start) / 2 # avoid mid overflow
if nums[mid] == target:
return mid
elif nums[mid] < target:
start = mid
else:
end = mid
if nums[start] == target:
return start
if nums[end] == target:
return end
return -1
--END--
以上是关于[基础算法]二分查找Binary Search的主要内容,如果未能解决你的问题,请参考以下文章