时间复杂度和大O记号

本文深入解析了时间复杂度的概念,通过具体实例展示了如何评估算法效率,并提供了算法优化的方法。介绍了大O记法,最坏时间复杂度,以及常见时间复杂度的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间复杂度:运行一个程序的基本步骤的总数量。(这么理解比较直观吧,看他一共需要执行的步骤)


Q:A,B,C,是1000以内的自然数,满足A+B+C=1000,A平方加B平方等于C平方。方法一:枚举法

import time

start_time = time.time()

for a in range(1001):
    for b in range(1001):
    for c in range(1001):
        if a + b + c == 1000 and a**2 + b**2 = c**2:
        print('a,b,c:%d,%d,%d'%(a,b,c))

end_time = time.time()
print('time is : %'%(end_time - start_time))


所需要的步骤:T = 1001*1001*1001*2
问题规模为N的话
T(n)=N*N*N*2 = 2*N^3  (常数2,可以不计较,2*N^3与10*N^3属于一个量级)
时间复杂度:T(n) = N^3

"大O记法":对于单调的整数函数f,若存在一个整数函数g和常实数C(C>0),使得对于充分大的n总有f(n) <= C*g(n),就说g是f的渐近函数,记f(n)=O(g(n))

“最坏时间复杂度”:最多需要多少步骤,提供了一种保证,在最坏时间复杂度下,该程序一定能运行完。


时间复杂度基本计算:
1、基本操作,即只有常数项,认为其时间复杂度为O(1)
2、顺序结构,时间复杂度按加法进行计算
3、循环结构,时间复杂度按乘法计算
4、分支结构,时间复杂度取最大值
5、判断一个算法的效率时,往往只需要关注操作数量的最高次项,次要项和常数项可以忽略
6、没有说明时,我们所分析的算法时间复杂度是“最坏时间复杂度”


改进算法:

for a in range(1001):
    for b in range(1001):
    c = 1000 - a - b
    if a**2 + b**2 == c**2:
        print('a,b,c:%d,%d,%d'%(a,b,c))

算法时间复杂度:
T(n) = N*N*(1 + max(0,1)) =2*N^2
     = O(N^2)


常见的时间复杂度(logn,不是和理解啊,那是什么鬼?)

常见时间复杂度大小比较:


上面没写的是:n^2 < n^2*log(n)<n^3 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值