时空复杂度的分析

一、时间复杂度

1.时间复杂度的概念

时间复杂度是一个函数,用于描述某种算法所需的运行时间。常用大O表述。

2.计算时间复杂度的意义

  • 避免代码运行出现TLE。
  • 通过计算时间复杂度反推算法内容:推荐博客yxc

3.如何粗略计算时间复杂度

当n很大的时候,常数项,系数和低阶项可以忽略。
因为n很大时,原函数与忽略这些因素后得到的函数计算出的结果差别不是很大,影响较小。

举例1

#include<iostream>
using namespace std;

int main(){
   int n;//执行了1次
   cin>>n;//执行了1次
   for(int i=0;i<n;i++)//i=0执行了1次,i<n执行了n+1次,i++执行了n次
      cout<<1;//执行了n次
      
   return 0;
}

其数据范围0<=n<=105
其中语句执行次数为3n+4,即T(n)=3n+4 (T(n) : 语句频度的符号,表示一个算法的语句执行次数)
当n很大时,可以用O(n)表述,即3n+4用n的时间复杂度表示,即O(n)=105

举例2

#include<iostream>
using namespace std;

int main(){
    int n,m;//执行1次
    cin>>n>>m;//执行1次
    for(int i=0;i<n;i++){//i=0执行了1次,i<n执行了n+1次,i++执行了n次
       for(int j=0;j<m;j++){//j=0执行了1次,j<m执行了m+1次,j++执行了m次
          cout<<1;//执行mn次
       }
    }
              
    return 0;

其数据范围0 <= n <= 103,0 <= m <= 103;
其中T(n)=mn+2n+2m+6,忽略其中的系数,低阶项,常数项后用O(nm)表示,即大O(nm)=106.

而一台测评机一般每秒执行109语句,时间复杂度在107~108最佳。
代码运行超时有两种情况 :

  1. TLE代码运行超时且结果正确
  2. WA代码运行超时但结果不正确

4. 常用的函数阶

符号名称
O(1)常数
O(n)线性
O(n2)平方
O(logn)对数
O(nlogn)线性对数
O(cn)指数
O(n!)阶乘
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值