算法效率的度量

n)*1/n=(1+n)/2 平均时间复杂度T(n)=O(n)T(n)=3n+3;例:T(n)=n^3+2n^2+3n+5200=O(n^3)+O(n^2)+O(n)+O(1)=O(n^3)不难想象,当n趋于无穷大时,表达式的值可只考虑最高阶项的值,因为其他低阶项的值对于整体的值影响非常的小。同理,T(n)=3n^2与T(n)=n^2也可以视为同一个数量级,都可以用T(n)=O(n^2)来表示。
摘要由CSDN通过智能技术生成

 时间复杂度

顾名思义,时间复杂度就是评估一个算法的时间开销。

直觉上想一想可以用什么样的思路来评估算法的时间开销?

首先可以想到的是直接让算法跑一遍,看看它用多久的时间。

但是这样的方法存在一些问题:

1、和机器性能有关,比如单片机和超级计算机的对比。一个垃圾算法,超级计算机也很快给你跑出来了,而另一边的好算法也还没跑出来。

2、和编程语言有关,越高级的编程语言执行效率越低。例如同一个算法,Java肯定比c语言慢。

3、和编译程序产生的机器指令质量有关。

4、有些具有破坏性和损耗性的算法无法通过运行后再测试。例如,控制导弹发射的算法,不可能等它发射后,再讨论这个算法的优劣,那样就毫无意义了。

所以我们就设想有没有一种方法,能够排除与算法本身无关的外界因素,直接评价它所需要用的时间?

算法时间复杂度因此而生。

事先预估算法时间开销T(n)与问题规模n的关系(T表示“time”)。

以下代码段:

void Hello(int n)       //n为问题规模
{
    int i=1;            //打招呼的次数
    while(i<=n)
    {
        i++;           //每次加一
        printf("Hello %d\n",i);
    }
    printf("Hello more than %d\n",n);
}
int main()
{
    Hello(3000);
}

语句频段:

int i=1;                                              ——执行1次

while(i<=n);                                      ——执行3001次

i++;                        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值