Формула подсчета средней оценки...

R
На сайте с 03.08.2012
Offline
131
4930

Здравствуйте! Я не знал куда написать... подумал, сюда лучше напишу... Вообщем на сайте делаю систему оценки текстов, т.е. у каждого текста на сайте есть своя оценка.

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

Можно ли определить среднюю оценку зная только оценку которая сейчас, и кол-во проголосовавших. Т.е. допустим сейчас средняя оценка 3 (оценки: 1, 2, 3, 4, 5 - эти данные мы не знаем, знает только среднюю оценку), проголосовало 5 человек, посетитель ставит новую оценку - 5.0, и средняя оценка становиться 3.33...

Вообщем, я думаю вы меня поняли...

Спасибо за помощь!

vlad00777
На сайте с 24.12.2009
Offline
119
#1

Формула: ((кол-во человек * среднюю оценку) + новая оценка) / кол-во человек + 1

Пример: ((5 * 3)+ 5)/ 5 + 1 = 3.33

Вроде так будет правильно.

Верстка. Качественно! Адаптивная, резиновая, с параллаксом и прочими плюшками. В ЛС.
[umka]
На сайте с 25.05.2008
Offline
456
#2
vlad00777:
Формула: ((кол-во человек * среднюю оценку) + новая оценка) / кол-во человек + 1
Пример: ((5 * 3)+ 5)/ 5 + 1 = 3.33
Вроде так будет правильно.

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

Лог в помощь!
R
На сайте с 03.08.2012
Offline
131
#3

капец, как же я не мог додуматься....:) Спасибо большое!!! А то голову сижу ломаю тут))))

IL
На сайте с 20.04.2007
Offline
435
#4
vlad00777:
Формула: ((кол-во человек * среднюю оценку) + новая оценка) / кол-во человек + 1

Скобки забыл..

А вообще, при таких делениях-округлениях потери будут.. поэтому корректнее хранить сумму всех оценок и количество голосов.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
R
На сайте с 03.08.2012
Offline
131
#5
ivan-lev:
Скобки забыл..
А вообще, при таких делениях-округлениях потери будут.. поэтому корректнее хранить сумму всех оценок и количество голосов.

Спасибо за совет!

TF-Studio
На сайте с 17.08.2010
Offline
334
#6

Такой способ подсчета "в лоб" не совсем корректен.

Если проголосовало 5000 тел и оценка 4,5

и проголосовало всего 3 тела и оценка 5

Второй вариант будет "лучше", что не всегда верно.

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
R
На сайте с 03.08.2012
Offline
131
#7

В случае с оценками, я думаю лучше оставить так. Это если делать рейтинг какая статья лучше, то там, да, лучше оценивать по нескольким факторам...

Оптимизайка
На сайте с 11.03.2012
Offline
396
#8
TF-Studio:
Второй вариант будет "лучше", что не всегда верно.

Именно. Поэтому - ТС, приглядитесь к этой статье: http://habrahabr.ru/company/darudar/blog/143188/. Посмотрите, как exler считает. И как на IMDB.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
IL
На сайте с 20.04.2007
Offline
435
#9
revered:
Это если делать рейтинг какая статья лучше, то там, да, лучше оценивать по нескольким факторам...

тут речь не про несколько факторов, а про начальные значения.

Т.е. свеженаписанная статья имеет, к примеру, уже 10 проголосовавших и сумму голосов, например, 35. В остальном - вся логика расчётов сохраняется. А для отображения рейтинга посетителям можно ввести минимальное необходимое количество голосов... До этого "пустые" звёзды отборажать.. Или полные...

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#10

я за доп.таблицу:

fieldlist: пост, оценка, юзер_голосовавший(если голосуют тока авторизованные)

пост - номер поста.

оценка - от 1 до 5(10)

юзер_голосовавший - на случай, если в будущем выводить список проголосовавших, кто какую оценку поставил и т.д.

Имея эти 3 поля мы можем выводить рейтинг так:

средний бал ||| кол-во голосовавших ||| суммарный бал

Благодаря этой таблице сможем найти самые оцениваемые посты и т.д.

Все сказаное - ИМХО, а не догма;)

Подпись))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий