二分法
二分法的输入是一个sorted的list, 以及需要查找数的位置,输出是需要查找数的位置,假如没有这个数字,返回null.
O记号始终对应.
对于一个长度为8的list,使用简单查找,最差需要查找8次,而使用二分法查找,那么最多只需要查找3次()
以下为python版二分法代码
def binary_search(list,item):
low = 0
high = len(list)-1
while low<=high:
middle = (low+high)/2
if list[middle] = item:
return middle
else if list[middle]<item:
low = middle+1
else if:
high = middle -1
else:
return None
linear time(简单搜寻):处理一个100个元素的list,那么最多就需要100次运算
log time(二分搜寻):处理一个100个元素的list,那么最多就需要次运算
大O记号
大O记号用来表示 进行操作的数量(和时间没有关系),比如n个元素的数组,使用简单搜索,需要进行n次搜寻,那么记作O(n),使用二分法,处理同样的数组,那么就是O(),也可以写作O().
各大O记号效率对比,横轴为操作次数,纵轴为运行时间