【发布时间】:2013-03-05 03:44:31
【问题描述】:
考虑以下两个循环,其中 N = 10^9 或大到足以注意到效率低下的值。
Loop x = 1 to N
total += A(x)
total += B(x)
或
Loop x = 1 to N
total += A(x)
Loop x=1 to N
total += B(x)
每个函数取 x,执行一些任意算术计算(例如 x^2 和 3x^3 或其他什么,无关紧要),并返回一个值。
总体运行时是否会有任何差异?如果有的话,什么时候不会出现这种情况?
【问题讨论】:
-
这两个函数是否有副作用,执行顺序可能会影响事情?如果您心中有一个具体的例子,何不试试呢?
-
我想不出一个执行顺序会严重影响运行时的好例子——我得考虑一下。但是您的回答暗示如果顺序无关紧要(即说它们是完全独立的函数——一个计算 x^2,另一个计算 x^5,仅此而已),运行时应该是相同的(或至少可以忽略不计)除非开始一个新循环需要成本)?
-
以上两个功能整体差异可以忽略不计。
-
@DoSparKot 我想我的问题开始被揭露为可能不正确,这取决于“任意”的含义——我想到的功能不会做任何激烈的事情, 只是一些任意操作,可能会将一些值存储在累积总和变量或其他东西中(例如,说 total += A(x) 和 total += B(x) )
-
@DoubleBass:可能在缓存访问或类似情况下会有显着差异 - 但很大程度上取决于具体情况。
标签: performance algorithm loops optimization runtime