【发布时间】:2013-07-05 07:03:14
【问题描述】:
我需要制定一个有效的算法来移动整数。
例如,平均 100 个项目。 因此,随着 100 个数字的到来,1..100 个数字的平均值.. 由于 101 数字平均为 2..101.. 由于 102 数字平均为 3..102..
我想到了一个解决方案,但我想不出这样可以存储最少的数字(在病房之后,我必须在微处理器中做,但首先,在 C/C++ 中高效):
第 1 步:存储 1..100 的数字并取平均值 第 2 步:将 1 替换为 101,取平均值:101,2,3...100 第 3 步:将 2 替换为 102,取平均值:101,102,3,4...100
但效率不高,因为我还需要使用较少的除法运算符。
谁能帮帮我。
【问题讨论】:
-
谷歌移动平均
-
如果您存储上一步的总和(而不是平均值),则无需完全重新计算所有 100 个数字的平均值。您只需从总和中减去一个值并添加新值,然后将总和除以 100。不过,这并不会减少除数。
-
您需要少用除法运算符吗?或者您只是想提出这样的要求,让问题变得更难,解决方案“更快”?
-
“微处理器”是可以执行完整指令集的任何微芯片。如果您的意思是“8位微控制器”,那就更具体了。但仅仅拥有某些硬件并不能证明这样的设计决策是合理的,而且“少用分工”也不是真正的工程要求。如果您需要将其限制为移位操作或其他内容,或者某些结果可能是近似的,那么请说出来。