Grokking algorithms(第一章)

二分法

二分法的输入是一个sorted的list, 以及需要查找数的位置,输出是需要查找数的位置,假如没有这个数字,返回null.

O记号始终对应log_{2}.

对于一个长度为8的list,使用简单查找,最差需要查找8次,而使用二分法查找,那么最多只需要查找3次(log_{2}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,那么最多就需要log_{2}100=7次运算

大O记号

大O记号用来表示 进行操作的数量(和时间没有关系),比如n个元素的数组,使用简单搜索,需要进行n次搜寻,那么记作O(n),使用二分法,处理同样的数组,那么就是O(log_{2}n),也可以写作O(logn).

各大O记号效率对比,横轴为操作次数,纵轴为运行时间

最后小结 

猜你喜欢

转载自blog.csdn.net/Gussss/article/details/95185257