算法效率的度量

时间复杂度是评估算法效率的重要指标,它排除机器性能、编程语言等因素,关注算法随问题规模n变化的趋势。通过分析算法代码,我们可以忽略低阶项和常数项,只保留最高阶项,并用O表示法描述其数量级。加法规则和乘法规则是计算时间复杂度的主要规则。在多层循环中,只需关注最内层循环次数。时间复杂度分为最好、最坏和平均情况,通常关注最坏时间复杂度和平均时间复杂度。空间复杂度则衡量算法所需存储空间与问题规模的关系。
摘要由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、付费专栏及课程。

余额充值