假设我有数字:1、2、4、7、12和18(随机选择)。计算均值时,速度更快:
mean=0
loop through [1, 2, 4, 7, 12, 18]
for each item:
increase mean by (item/total number of items)
或
mean=0
loop through [1, 2, 4, 7, 12, 18]
for each item:
increase mean by (item)
divide mean by 3
还是对算法的速度没有影响?这是一个纯粹的理论问题(忽略了所选择的特定编译器等)
答案 0 :(得分:1)
这在一定程度上取决于编译器的智能程度-有些会执行很多优化,而有些则不会那么多。通常可以配置优化级别,以便您可以更改编译器转换代码的程度。
在优化的范围内,编译器可以识别出您的代码正在计算一个常量值,并在编译过程中对其进行预计算,然后将结果放入输出变量中。绝对有可能。
另一种可能性是编译器认识到循环在固定范围内,因此它删除了循环并扩大了求和。
在没有优化的限制下,您的第一个代码段执行了6次除法运算,而第二个代码段仅执行了一个。由于每个代码段的其他操作数均相同,因此第一个代码段不能比第二个代码段更快,并且可能较慢。
在语言的编译器或解释器中了解优化并尝试各种优化级别以了解每个代码段的性能如何变化可能会很有帮助。您可能需要更大的输入样本才能获得有用的时间测量结果。