Пусть есть некоторый
очень, очень большой файл, где в каждой строке числа, для простоты - целые.
Рассчитать среднее значения через формулу
сумма/кол-во нельзя, т.к. файл огромен, в оперативку сумма не поместится (просто смеритесь с этим!). Поэтому я придумал форму (наверняка не я первый):
((i-1) * avg + nextValue) / i гдеi - это текущее кол-во рассчитанных чисел (текущий шаг начиная с 1);
avg - текущее среднее значение;
nextValue - следующее значение (из файла).
Например:
3
3
6
читаем построчно
для 3:
(0 * 0 + 3) / 1 = 3
для 3:
(1 * 3 + 3) / 2 = 3
для 6:
(2 * 3 + 6) / 3 = 4
т.е. в любой момент можно остановиться и узнать текущее средн. арифм. значение.
Итого: Среднее значение меняется на
каждом шаге, а в будущее заглянуть не дано.
Вопрос: как узнать
среднеквадратичное отклонение, если для него нужно заранее узнать среднее значение?
Википедия: Среднеквадратическое отклонениеP.S. Пожалуйста, учтите, что файл
очень большой. Представьте себе, самый мощный супер компьютер и SSD диском бесконечно большого объёма (но с ничтожной ОЗУ) будет считывать данные неделями. И остановится он по сигналу, после чего должен сразу же выдать ответ, а не начать считывание повторно (зная среднее значение).