大佬教我算法-1 时间复杂度

##你好 算法  
#
import time
import functools


def time_dec(func):
    @functools.wraps(func)
    def wapper(*args, **kw):
        start = time.time() * 1000
        back = func(*args, **kw)
        end = time.time() * 1000
        print('%s cost time is %f ms' % (func.__name__, (end - start)))
        return back
    return wapper


#牛顿迭代法 求解平方根
#
def newton_iter(x, e = 0.00001):
    if not isinstance(x, (int, float)) or not isinstance(e, (int, float)):
        raise Exception('invalid input', x, e)
    if e < 0:
        raise Exception("invalid e!", e)

    y = x

    while abs(y*y - x) >= e:
        z = (y + x/y)/2
        y = z
        # print(y)
    return y

start = time.time() * 1000
print(newton_iter(5555555555, 0.00000001))
end = time.time() * 1000
print('niubi cost time is %f ms' % (end - start))

 
##红绿灯问题   我咩搞懂

def coloring(G):                    # 做图G的着色
    color = 0
    groups = set()
    verts = vertices(G)             # 取得G的所有顶点
    while verts:
        new_group = set()
        for v in list(verts):
            if not_adjacent_with_set(v, new_group, G): # 定点v与new_group的所有点都没有边,不相邻
                new_group.add(v)
                verts.remove(v)
        groups.add((color, new_group))      # 着色
        color += 1
    return groups


##一个关于算法复杂度很好的例子
#

def fib_1(n):
    if n < 2:
        return 1
    else:
        return fib_1(n-1) + fib_1(n-2)

@time_dec
def fib_2(n):
    f1 = f2 = 1
    for i in range(1, n):
        f1, f2 = f2, f1 + f2
    return f2

num = 20
start = time.time() * 1000
fib_1(num)
end = time.time() * 1000
print('fib_1 cost %f ms' % (end - start))

fib_2(num)




##很有意思的东西   

@time_dec
def test1(n):
    lst = []
    for i in range(n * 10000):
        lst = lst + [i]
    return lst

@time_dec
def test2(n):
    lst = []
    for i in range(n * 10000):
        lst.append(i)
    return lst

@time_dec
def test3(n):
    return [i for i in range(n * 10000)]

@time_dec
def test4(n):
    return list(range(n * 10000))

##没有可比性
@time_dec
def test5(n):
    return [0] * n * 10000

num = 50
# test1(num)
test2(num)
test3(num)
test4(num)
test5(num)


你可能感兴趣的:(大佬教我算法-1 时间复杂度)