数据结构与算法之时间复杂度和空间复杂度(三)

算法是要讲效率的 ,而效率是指算法的执行时间   执行时间短当然是效率高 反之则低

那么如何来衡量算法的时间呢?

1:算法采用的策略 方案

2:编译产生的代码质量

3:问题的输入规模

4:机器执行指令的速度

比如1+2+...+100,

第一种:

 int n = 100; //执行一次
        int sum = 0; //执行一次
        for(int i=1;i<n;i++){  执行n+1次
            sum+=I;//执行n次
        }

第二种写法:

 int n = 100; //执行一次
        int sum = 0; //执行一次
         sum=(1+n)*n/2; //执行一次

相比之下,第二种更简单,效率最高,而第一种做法还要循环,如果数据很大的话就循环更多了,消耗cpu的时间更长了.

第一种方案执行了1+1+(n+1)+n=2n+3次

第二种方案就执行了3次

现在讲下时间复杂度和空间复杂度的概念

时间复杂度:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随着n的变化情况确定T(n)的数量级, 算法的时间复杂度,也就是算法时间的量度,几座T(n)=O(f(n)) 它表示随问题规模n的增大,算法执行时间的增长率和f(n)增长率相同,称作算法的渐近时间复杂度, 简称为时间复杂度,其中f(n)是问题规模n的某个函数

这样用大O()来体现算法时间复杂度的计法, 我们称之为大O记法

一般情况下,随着输入规模n的增大,T(n)增长最慢的算法称之为最优算法

我们还是对从1加到100第二个方法就一行代码就计算出来,  不管n是多少,就一行代码解决问题,这是最好的算法.可以使用O(1)表示

推导大O算法

1:用常量1取代运行时间中的所有加法常数  这个就是常数阶

2:在修改后的运行次数函数中,只保留最高项 , 比如2n+1就是O(n)   这个是线性阶

3:如果最高项存在且不是1,就去除这个项相乘的常数 2*n^2+1 就是n^2  这个是平方阶  还有立方阶 

4:对数阶 举个例子:

 int i=1;
       int n=100;
       while (i<n){
           i=i*2;
           System.out.println("i="+i);
       }

每循环一次都是在原来的基础上乘以2,从中我们可以得出2^x=n,利用我们高中的数学知识x=log(2)n,所以这个时间复杂度为

大O(logn),

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值