zoukankan      html  css  js  c++  java
  • 枚举效率测试 --简单计算题

    题目 :计算a+b+c=1000,a^2+b^2=c^2,求解a,b,c

    要求:不适用数学模块计算

    思路

    装饰器

    import time
    def timer(f):
        def inner(*args,**kwargs):
    
            start_time=time.time()
            ret=f(*args,**kwargs)
            end_time=time.time()
            print("%s函数耗时>>>%s"%(f.__name__,end_time-start_time))
            return ret
        return inner

    枚举法编程

    @timer
    def cul():
        #枚举效率太低:1001*1001*1001
        # 时间复杂度 T=1001*1001*1001*(1+max(1,0))
        result=[]
        for i in range(1001):
            for j in range(1001):
                for k in range(1001):
                    if i+j+k==1000 and i*i+j*j==k*k:
                        result.append((i,j,k))
        print(result)
    
    @timer
    def cul2():
        #时间复杂度: T=1000*(1000-b)*(1+max(1,0))
        for i in range(1000):
            b=1000-i
            for j in range(b):
                c=1000-i-j
                if i*i+j*j==c*c:
                    print(i,j,c)
    cul()
    
    cul2()

    效率与结果演示

    [(0, 500, 500), (200, 375, 425), (375, 200, 425), (500, 0, 500)]
    cul函数耗时>>>116.00485754013062
    0 500 500
    200 375 425
    375 200 425
    500 0 500
    cul2函数耗时>>>0.1517164707183838

    时间复杂度:

    cul : T=1001*1001*1001*2 --->T=2*n^3   ---> T=n^3  (n代表项目的复杂度)

    cul: T=1000*2 ---> T=2*n  ----->T=n

    时间复杂度计算原则

      顺序结构:按照加法计算 (+)

      条件结构:按照最坏时间复杂度计算max(O(x1),O(x2)...)

      循环结构 :按照乘法计算 (*)

  • 相关阅读:
    网鼎杯_2018 _Web_fakebook
    CISCN 2019-ikun
    流浪者-CTF
    wtf.sh-150
    bug-ctf
    EasyRE
    MySQL 存储引擎特性和线程模型
    InnoDB体系结构---物理存储结构
    mysql数据页结构及行格式
    linux系统清理缓存
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/10313083.html
Copyright © 2011-2022 走看看