Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Итеративный метод подсчета среднего арифметическог, может кто знает что-нибудь хитрое... =) 
:(
    Опции темы
cardinal
Дата 6.2.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



То есть как бы цикл, в нем надо каждый раз получая новое число считать среднее арифметическое с учетом это числа

То есть на примере: ср. ариф. чисел 2, 5, 8, 14 равно 29/4 = 7.25
а как посчитать это имея
2
потом 5 (ср. ариф. равно 3.5)
потом 8 (ср. ариф. равно 5)
потом 14 (см. выше)

Вот сейчас пишу и думаю, а не самый ли просто вариант считать так:

((((((2)/1+5)/2)+8)/2)+14)/2 = 9.875

Как бы получается примерное среднее арифметическое... Какие есть мысли?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
maxim1000
Дата 6.2.2008, 00:51 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(cardinal @  6.2.2008,  00:22 Найти цитируемый пост)
((((((2)/1+5)/2)+8)/2)+14)/2 = 9.875

может, и простой, но неправильный
более поздние значения будут иметь бОльший вес
(на самом деле, иногда это - именно то, что нужно, но среднее арифметическое - несколько другое)
чтобы получить настоящее среднее арифметическое, нужно на каждом шаге считать взвешенное среднее:
s[n]=( (n-1)*s[n-1]+1*x[n] )/n


--------------------
qqq
PM WWW   Вверх
cardinal
Дата 6.2.2008, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



s[n]=( (n-1)*s[n-1]+1*x[n] )/n

x[1] = 2
x[2] = 5
x[3] = 8
x[4] =14

s[1] = x[1]/1 = 2
s[2] = (s[1] + x[2])/2 = (2 + 5) / 2 = 3.5
s[3] = (2*s[2]+x[3])/3 = (2*3.5 + 8)/3 = 5
s[4] = (3*s[3]+x[4])/4 = (3*5 + 14)/4 = 7.25

...

Вывод: именно это и искал... smile

Спасибо!

Кстати доказывается просто. Можно было и самому додумать... smile

s[1] = x[1]
s[2] = (x[1] + x[2])/2
s[3] = (x[1] + x[2] + x[3])/3 = (2 * (x[1] + x[2])/2 + x[3])/3 = (2 * s[2] + x[3])/3
...
s[n] = ((n-1)*s[n-1] + x[n]) / n


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
maxim1000
Дата 6.2.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



кстати, можно ещё немного переделать:
s[n]=s[n-1]+(x[n]-s[n-1])/n
есть подозрения, что эффекты погрешностей вычислений будут меньше...


--------------------
qqq
PM WWW   Вверх
cardinal
Дата 6.2.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Цитата(maxim1000 @  6.2.2008,  10:51 Найти цитируемый пост)
кстати, можно ещё немного переделать

Ну то есть скобки раскрыть.

Насчет погрешностей не знаю, но то что вместо умножения и деления остается одно деление - это факт. Это мне нравится. smile Спасибо!


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Earnest
Дата 20.2.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Такая задача часто возникает, когда жаба давит каждый раз, при добавлении данных, среднее (или другую статистику) пересчитывать. Я обычно пишу маленький классик с методами Add и Get. 
Он данные накапливает (т.е. суммирует) и хранит еще число объектов. А по запросу выдает текущее среднее. Можно легко на случай с весами расширить и т.д.


--------------------
...
PM   Вверх
cardinal
Дата 20.2.2008, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Кому "жаба давит", а кто программирует мк, которые работают на гораздо меньшей частота чем PC и памяти у которых гораздо меньше. Вот и думаешь как бы что получше сделать.
Сделал я в итоге правда проще. Брал последнии 4 значения, складывал и делил на 4. Просто и понятно...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
scalosale
Дата 8.2.2023, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 8.2.2023

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1318 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.