Помогите создать алгоритм Sort by Top - PullRequest
0 голосов
/ 16 июня 2011

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

Рядом с каждым рисунком будет кнопка «Мне нравится», и каждый щелчок по этой кнопке будет подсчитывать голосование за рисунок.

Также будет раздел «Лучшие рисунки», где рисунки будут отсортированы по «Верху».

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

Любая помощь будет очень ценится!

Каждый пользователь может проголосовать только один раз (у компании лот сотрудников), я не храню информацию о том, сколько просмотров у чертежа (не так ли?).

Я не уверен, какую формулу использовать ... Я думаю, что новые загруженные рисунки должны иметь возможность быть в верхнем списке, верно?

Спасибо!

Ответы [ 3 ]

1 голос
/ 16 июня 2011

Рэндалл Манро из XKCD написал отличную статью о том, как Reddit справляется именно с этим, здесь .Эта статья ссылается на , эта , которая охватывает все наивные подходы, описывает их недостатки, а затем объясняет, как построить систему рейтинга, которая действительно работает так, как вы этого хотите.

0 голосов
/ 16 июня 2011

Вы можете отсортировать по последним голосам. Таким образом, новые рисунки, которые сейчас получают голоса, будут сортироваться раньше старых рисунков. Многие сайты имеют несколько «Топ» списков, расположенных по временным рамкам. Например, «Лучшие на этой неделе», «В этом месяце» и «За все время».

Если у вас может быть только один «верхний» список, то вы можете «состарить» старые рисунки. Таким образом, рисунок, который имеет 10 голосов, но имеет месячный возраст, может получить множитель возраста 0,8, тогда как новый рисунок будет иметь множитель 1,0.

0 голосов
/ 16 июня 2011

Я бы пошел с усредненным рейтингом, исключая рисунки, которые не набрали определенное количество голосов.Таким образом, если бы на розыгрыше был только один голос, но это были 5 звезд, он не выиграл бы автоматически.Что-то вроде:

if votes >= minVotes:
    score = sum(ratings)/votes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...