这是一个关于估算效率的原则的问题。在我的一个项目中,我遇到了这样的情况:函数获得两个正整数,并返回两个正整数中最低的一个。我想知道,我通常使用的方法,在计算步骤的数量上,是否是估算效率的一种比较准确的方法,以及是否有其他方法,或者我是否应该总是简单地比较它们运行的速度。
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,因为它的步骤似乎较少。
发布于 2016-10-30 11:46:29
计数步骤是分析算法渐近效率的一种方法。这是一种衡量算法扩展到更大输入的程度的度量。
然而,要比较两个函数的速度,对于一个固定的输入大小,我们确实需要看看它们实际执行的速度。数数步骤充其量不过是一个粗略的指南,因为:
关于哪些操作可能比其他操作慢,有很多经验规则,但唯一确定的方法是测量,在尽可能接近真实用例的情况下进行度量。
备注
在这一具体守则中:
发布于 2016-10-30 11:17:22
对于这种大小的函数,它几乎肯定不重要,因为函数无论如何都会运行得太快。
然而,对于大量的计算,该方法肯定是正确的。事实上,像这样计算“步骤”是计算机科学中称为“算法分析”的子领域的基础。
在实践中,您需要更多的步骤才能真正做到这一点--至少有几十万个步骤,除非这些步骤非常昂贵。
https://stackoverflow.com/questions/40328447
复制相似问题