时间复杂度---关于搜索

如果我们想要在数组找到我想要的元素应该怎么办呢??

def S1(a,L1):
    L2=[]
    for i in L1:
        if a == i:
            L2.append(i)
    return L2

这种遍历的方法就行 复杂度是 O(len(L1)) 我们没次都是会做最坏打算的所有遍历是必须的

这种方法实在是太慢,难道没有更好的方法吗?

答案就是二分法(当然是有序数组)

 我们可以把数组中间的元素和我们要找的元素比较,然后如果中间的元素比较大 那么就把前面一段数组重复这个操作

 我们可以想象一下,每次重复操作范围都会除以2 那么这个算法肯定是对数级别的

def serch1(a,L1):
    su = len(L1)
    if  su < 2:
        return False
    item = su/2if a < L1[item]:
        L1 = L1[:item]
        return serch1(a,L1)
    if a > L1[item]:
        L1 = L1[item:]
        return serch1(a,L1)
    if a == L1[item]:
        return item

see 这个逻辑是不是很清晰 

posted @ 2016-06-30 21:53  nerdlerss  阅读(139)  评论(0编辑  收藏  举报