初级算法,用时差距timer

'''
 执行的总次数:
     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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值