首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++步骤作为效率

c++步骤作为效率
EN

Stack Overflow用户
提问于 2016-10-30 11:12:05
回答 2查看 63关注 0票数 1

这是一个关于估算效率的原则的问题。在我的一个项目中,我遇到了这样的情况:函数获得两个正整数,并返回两个正整数中最低的一个。我想知道,我通常使用的方法,在计算步骤的数量上,是否是估算效率的一种比较准确的方法,以及是否有其他方法,或者我是否应该总是简单地比较它们运行的速度。

代码语言:javascript
复制
Function(int a, int b)
{
    int lowest = a - b;                   //3 steps, allocating, assigning and calculating
    lowest = lowest * lowest / lowest;    //3 steps, 2 in calculating, 1 in assigning
    //6 steps total

    return lowest;
}

Function(int a, int b)
{
    int lowest;        //1 step in allocating
    if(a > b){         // 2 steps, 1 in comparing, 1 in picking the outcome
        lowest = b;        // 1 step in assigning
                           // Total 4 steps
    }else{
        lowest = a;        // 1 step in assigning
                           // Total 4 steps
    }
    return lowest;
}

在这种情况下,我会选择函数2,因为它的步骤似乎较少。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-30 11:46:29

计数步骤是分析算法渐近效率的一种方法。这是一种衡量算法扩展到更大输入的程度的度量。

然而,要比较两个函数的速度,对于一个固定的输入大小,我们确实需要看看它们实际执行的速度。数数步骤充其量不过是一个粗略的指南,因为:

  1. 执行的步骤不是C++语句,而是它们编译到的机器代码指令
  2. 即使您的C++语句被编译成相同数量的指令(它们可能没有编译),指令也不会都采用相同的时钟周期来执行
  3. 即使它们都有相同的概念延迟,这些函数也可能是内联的,这意味着孤立地考虑它们并不那么有用。您需要知道它们如何影响每个呼叫站点的优化代码。

关于哪些操作可能比其他操作慢,有很多经验规则,但唯一确定的方法是测量,在尽可能接近真实用例的情况下进行度量。

备注

在这一具体守则中:

  • 版本1看上去不像是给出了正确的结果,但是忽略了这一点--它有更多的步骤,但它们大多是整数算法,这是经过大量优化的,通常速度很快。
  • 第2版的步骤较少,但其中一个步骤是分支(if),这在历史上是缓慢的。 有些体系结构允许同时执行两个分支( if和both ),这可能会使它再次快速执行。它还可能导致分支预测溢出,对其他代码产生连锁效应,从而减慢其他代码的运行速度。
票数 0
EN

Stack Overflow用户

发布于 2016-10-30 11:17:22

对于这种大小的函数,它几乎肯定不重要,因为函数无论如何都会运行得太快。

然而,对于大量的计算,该方法肯定是正确的。事实上,像这样计算“步骤”是计算机科学中称为“算法分析”的子领域的基础。

在实践中,您需要更多的步骤才能真正做到这一点--至少有几十万个步骤,除非这些步骤非常昂贵。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40328447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档