##你好 算法 🙂
#
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 时间复杂度
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。