'''
执行的总次数:
1+n+n+1 --->2n+2
test()函数的执行次数:
7次
时间的复杂度:
算法:
通过写代码告诉计算机确切的执行的步骤(或者某一个特定的任务)。
算法在处理信息,不断的从数据的存储地址读取数据,把运算的结果进行存储。
编程者来说,就是一种思想(思路)。
['python','','','linux','mysql','','html5']
for i in list1:
if i==None:
list1.remove(i)
算法的特点:
1. 输入:输入要有0或者多个
2. 输出:输出结果也要有1到多个
3. 有穷性: 有合适的结束,而不是无限的循环
4. 确定性: 每行代码必须要明确意义(做什么)
5. 可行性: 代码的每一步都是可以执行的的
'''
算法的复杂度:
1. 衡量标准:
A. 算法在计算机执行中所消耗的时间
B. 算法在执行中所占用的资源的大小,比如:内存空间的大小
C. 算法的易理解性,易实现性。
2. 算法在计算机执行中所消耗的时间
跟时间有关的因素:
A. 数据输入的时间
B. 算法编译成可执行程序的时间
C. 计算机执行每条指令的时间
D. 算法语句重复执行的次数
所消耗的时间从小到大
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
两种方式时间差距很大
# x+y+z = 800 并且 x**2+y**2=z**2
import time
start = time.time()
# for x in range(1, 801): # 800
# for y in range(1, 801): # 800
# for z in range(1, 801): # 800
# if x + y + z == 800 and x ** 2 + y ** 2 == z ** 2:
# print('x={},y={},z={}'.format(x, y, z))
用时75秒,
for x in range(1, 801): # 800
for y in range(1, 801): # 800
z = 800 - x - y
if x ** 2 + y ** 2 == z ** 2:
print('x={},y={},z={}'.format(x, y, z))
end = time.time()
# n*n*n
print('用时:', (end - start))
用时0.75秒
Timer:
第一个参数是你要计时的语句或者函数。 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导入语句。
从内部讲, timeit 构建起一个独立的虚拟环境, 手工地执行建立语句,然后手工地编译和执行被计时语句。
一旦有了 Timer 对象,最简单的事就是调用 timeit(),它接受一个参数为每个测试中调用被计时语句的次数,
默认为一百万次;返回所耗费的秒数。
from timeit import Timer
from timeit import timeit,repeat,default_timer
def del1():
x = list(range(1000))
for i in range(100):
x.pop()
def del2():
x = list(range(1000))
for i in range(100):
x.pop(0)
tt1 = timeit('del1()', 'from __main__ import del1', number=10000)#number执行10000次
tt2 = timeit('del2()', 'from __main__ import del2', number=10000)
print('del1', tt1)
print('del2', tt2)
初级算法,用时差距timer
于 2019-08-20 16:23:22 首次发布