时间复杂度的计算(一)

电子信息专业,使用c++和python开发过几个项目。但是非科班出身,没有系统的学过数据结构,数据库,计算机协议等。希望从本篇开始,使用博客的形式记录一下重要的专业概念。

时间复杂度概念

简单理解,时间复杂度是衡量代码运行时间的重要指标

为什么引入时间复杂

如下图所示,随着横坐标(数据规模)的增大,绿色曲线的值(耗费时间)增长最快,其次是蓝色曲线,增长最慢的则是红色曲线。

当然,我们都希望自己的程序像红色曲线一样,面对大规模的输入数据时,仍然可以保持较低的运行时间。

但是,世界上不会存在完美的代码,既不消耗最多的时间,也不占用最多的空间,鱼和熊掌不可得兼,那么我们就需要从中去寻找一个平衡点,使得写出一份较为完美的代码。这时,引入时间复杂度和空间复杂度的计算就成为了必要。

如何计算时间复杂度

由简入繁,看下面代码

int funcl(void)
{
printf("坤坤真帅\n");
return 0;
}

函数的主体部分有两行,每调用一次func1,代码执行两次。使用T(n)表示一段代码的总执行次数,即T(n)=2;

下面我们看一下时间复杂度O(n)与运行次数T(n)的关系:

这段关系可以简单理解为高数中的高阶无穷小。即数据量n趋向无穷大时,一些低次项可被约掉,并且系数在幂指数前面也不值一提,系数也全部约掉,即系数全为1。

显然,此例中T(n)为常数,故时间复杂度为O(1)。

再看一段含有循环的代码

int func2(int n)
{
for(int i=0;i<n;i++)
{
   printf("坤坤宇宙第%d帅\n".i)
}
return 0;
}

由于循环语句,每调用一次func2,代码总执行次数T(n)=3n+3;按照时间复杂度O(n)与运行次数T(n)的关系,保留T(n)的最高次项并且去掉最高次项的系数,O(n)=n;

再再看一个双重循环的代码

void func3(int n)
{
  for(int i= 0:i< n; ++i)
  {
    for(int j= 0:j< n; ++j)
    {
      printf("鸡你实在是太美!\n");
    }
  }
return 0;
}

由于循环语句,每调用一次func3,代码总执行次数T(n)=n^2+2n+1,O(n)=n^2;

总结

通过此章片面的理解(不正确的),有m重循环,时间复杂度就是O(n)=n^m。但是,这三个例子仅仅是最简单的时间复杂度,还有更复杂的,放在下章说明。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值