什么是算法时间复杂度

问题:

1 + 2 + 3 + ...... + 100 = ?

 

算法1:

int sum=0;

int n=100;

for(int i=1;i<=n;i++){

  sum +=  i;

}

System.out.println(sum);

 

算法2:

int sum=0;

int n=100;

sum=(1 + n)*n/2;

System.out.println(sum);

 

影响算法效率的因素:

1.算法的内容

2.编译的质量                           依赖编译器

3.问题的规模

4.机器执行指令的速度             依赖硬件

 

可控的影响因素:

算法                   规模

       算法1          n

       算法2          n

 

一个算法的执行数量     f(n)                是n的一个函数

一个算法的时间复杂度 O(f(n))           是执行数量经过一个规则得到的结果

 

执行数量计算时间复杂度的规则:

       取最高项                                     影响f(n)数值变化的最主要因素

       去掉常量                                     随着n的增长,该值可忽略

       去掉最高项的系数                       随着n的增长,该值可忽略

       去掉低次项                                 随着n的增长,该值可忽略

       没有最高项,值为常量1

 

       3 --> O(1)

       n --> O(n)

       2n+1 --> O(n)

       n^2 + 3n + 1 --> O(n^2)

       log2 n --> O(log n)

 

算法1的时间复杂度:O(n)

算法2的时间复杂度:O(1)

 

int x = 0;

int sum = 0;

for(int i=1;i<=n;i++){

  for(int j=1;j<=n;j++){

    x++;

    sum += x;

  }

}

 

f(n) = n * n;

时间复杂度:O(n^2)

 

int x = 0;

int sum = 0;

for(int i=1;i<=n;i++){

  for(int j=i;j<=n;j++){

    x++;

    sum += x;

  }

}

 

f(n) = n + (n-1) + (n-2) + ...... +1 = (n + 1) * n / 2 = n^2/2 + n/2;

时间复杂度为:O(n2)

 

效率:

O(1) < O(log n) < O(n) < O(n*log n) < O(n^2) < O(n^3) < O(n!) ......

 

从f(n)转O(n)比较简单,问题是怎么计算f(n),需要数学的知识。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值