average - 给定一个整数流,求平均值
问题描述
有一个连续的整数流,并且必须在任何给定实例上仅使用内存来计算平均值。
解决方案
使用纳秒级分辨率,您的项目数也会在几天内溢出。
但是,您可以 - 而不是保留总和 - 保留旧的平均值并在新商品到达时重新称重。
private static void average(int... amount) {
double average = (double) amount[0];
for (double i = 1; i < amount.length; i++) {
System.out.printf("average: %d%n", (int) average);
double newWeight = (i + 1d) / i;
double newAverage = average / newWeight;
double thisAverage = (amount[(int)i]) / (i+1d);
average = newAverage + thisAverage;
}
System.out.printf("average: %d%n", (int) average);
}
至于为什么会这样,假设你正在经历这些价值观
3、2、5
第一个值将导致平均值
3 / 1 = 3
(“1”是值的数量)。
现在,2来了。这意味着我们想要 (3+2)/2,或 (3/1)/2 + (2/2),因此我们将之前的平均值“3”除以 (1+2)/2。现在是新平均值
3/2 + 2/2 = 2.5
现在5来了。现在我们想要
(3+2+5)/3 = (3+2)/3 + 5/3
或 - 因为我们不再有 (3+2) 中的 3 和 2 -
= (3+2)/2 * 2/3
(3+2)/2 是旧平均值,2 是旧计数,3 是新计数。
推荐阅读
- java - 如何禁用组合框中的项目?
- javascript - 获取按键字符代码的最佳实践/标准兼容方法
- flutter - flutter riverpod:如何测试 asyncvalue.error?
- angular - 错误 TS2322:类型“列表 | undefined' 不可分配给类型 'any[] (Iterable
& 任何[]) | (任何[] & 可迭代 ) | 空 | 不明确的' - python - 获取单词的开始和结束索引?
- node.js - 如何使用 Apollo Server 清除设置的 cookie
- ocaml - 取消分配大数组
- python - 在 python 中,当我尝试选择随机数时,如何确保使用 randint 的种子不断变化?
- php - Fat Free 使用 Google OAuth + Google API
- c# - 使用占位符和 html 标签存储字符串