c++步骤作为效率
c++ steps as efficiency
这是一个关于评估效率背后的原则的问题。在我的一个项目中,我遇到了这种情况:一个函数得到两个正整数,并返回两个正整数中最小的那个。我想知道我通常使用的这种计算步数的方法是否是一种比较准确的估计效率的方法,以及是否有其他方法,或者我是否应该总是简单地比较它们的运行速度。
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,因为它似乎有更少的步骤。
计算步数是分析算法渐近效率的一种方法。这是一种衡量算法扩展到更大输入的能力的方法。
然而,为了比较两个函数的速度,对于固定的输入大小,我们真的需要看看它们实际执行的速度。计算步骤在这里充其量是一个粗略的指导,因为:
- 执行的步骤不是c++语句,而是编译到的机器码指令。
- 即使你的c++语句编译成相同数量的指令(它们可能不是),指令并不都需要相同数量的时钟周期来执行
- 即使它们都具有相同的名义延迟,这些函数也可能是内联的,这意味着孤立地考虑它们并没有那么有用。您需要知道它们如何影响每个调用站点的优化代码
关于哪些操作可能比其他操作慢有很多经验法则,但唯一确定的方法是在尽可能接近地再现您的真实用例的设置中进行度量。
注意
在此特定代码中:
- 版本1看起来不像它会给出正确的结果,但忽略它-它有更多的步骤,但它们大多是整数算术,这是大量优化和通常快速
-
版本2的步骤更少,但其中一个步骤是分支(if),这在历史上一直很慢。
一些体系结构允许两个分支(if和else)同时执行,这可能会使它再次变快。它还可能导致分支预测溢出,对其他代码产生连锁反应,减慢其他代码的运行速度。
对于这种大小的函数,这几乎没有关系,因为函数无论如何都会运行得很快。
然而,对于大型计算,该方法绝对是合理的。事实上,像这样计算"步骤"是计算机科学的子领域"算法分析"的基础。
在实践中,您需要更多的步骤才能真正发挥作用-至少需要数十万个步骤,除非这些步骤异常昂贵。
相关文章:
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 代码的效率. 转到和函数调用
- 对于循环C++可能效率低下
- 内存效率表示最短路径的方法?
- 如何提高该函数的运行效率?
- 效率:标准::数组与标准::矢量
- 如何提高BST的搜索操作效率?
- 字符串引用参数的效率C++
- 提高基于组件的游戏引擎的效率
- 在 c++ 中使用带有映射的插入效率
- 关于效率的问题
- 在SQLITE数据库中写入记录需要花费大量时间.如何提高刀片操作效率?
- 寻求提高Microsoft密封库计算效率的方法
- 做对了一个类似竞争的问题,但需要帮助来提高效率
- C++ - 与 Numpy 中的矢量版本相比,Argsort 效率低的矢量版本实现
- C++,在对象内分配多个数据时,堆栈分配是否更有效? 在下面的程序中,类A_Heap的效率会更低吗?
- visual C++|循环效率
- 我创建了一个库,想知道设计是否效率低下
- 矩阵rowSums()与colSums(()在R与Rcpp与Armadillo中的效率
- 共享指针的复制和交换效率