我敢打赌,你想要一些快速的东西,否则你已经有了答案。将您已经拥有的所有数字与您已经拥有的数组的长度相加。这很简单。
但有时您无法知道数组是否有界,它可能是无限的,例如来自麦克风的数据。在这种情况下,移动平均线的建议很好,这意味着您必须从数组中获取最后的 x 值并仅计算这些值的平均值。无论您有 x 值还是 1000x 值,算法和计算结果所需的时间都保持不变。
编辑:
x vs 1000x 来自算法复杂性。假设您将 5 个数字相加,即 5 次运算,然后除以 5,再进行一次运算,总共 6(为了示例,我们假设它们都花费相同的计算机时间,但实际上除法很慢与添加相比)。如果你使用相同的代码但有 1000 个数字,你会执行 1001 次操作,这将比第一种情况花费更多的时间!
使用“移动平均线”,您始终采用固定数量的数字,因此无论您有 5 个还是 1000 个数字,您的算法都需要固定的时间来执行。
移动平均线只是一种花哨的措辞,它表示您不会从一次到另一次在数组中采用相同的数字。想象一下以下数组:
int x = { 1, 4, 6, 3, 1 };
int arrayLength = 5;
那么这个数组的平均值就是
int runningTotal = 0;
for(int i = 0; i < arrayLength; i++)
{
runningTotal += x[i];
}
double average = runningTotal / arrayLength
3 个值的移动平均值将是
int movingLength = 3;
int runningTotal = 0;
for(int i = 0; i < movingLength; i++)
{
runningTotal += x[arrayLength - i - 1];
}
double average = runningTotal / movingLength;
所以当数组增长时,数组中的第一个值不是计算的一部分。