Вопрос

Для студенческого совета в этом году я нахожусь в комитете «песни», мы выбираем песни. К сожалению, дети на танцах всегда в конечном итоге ненавидят некоторые из глупых вариантов песен. Я думал, что смогу сделать это другим в этом году. В прошлый четверг я создал простое приложение PHP, чтобы дети могли отправлять песни в базу данных, предоставив название песни, артист и жанр (из раскрывающегося списка). Я также внедрил функцию голосования, похожая на Reddit's. Нажмите кнопку UPVOTE, вы провели песню, увеличили количество UPVOTE. То же самое с примирами.

В любом случае, в базе данных, у меня есть три лакомых кусочка информации, которые, как я думал, я мог бы использовать, чтобы оценить эти песни, подсказки, побочные голосования и метка времени. Некоторое время звание было создано, просто имея песни с более высоким подсчетом «голосования» на вершине. То есть, тем больше продовольств, меньше поклонников (Upvotes - Downvotes) будут в верхней части списка. Это сработало какое -то время, но к воскресенью в списке было около 75 песен, и песни, которые были представлены первыми, были просто на вершине списка.

В воскресенье я изменил алгоритм ранга на (Upvotes - Downvotes) / (CurrentTimeStamp - CreationTimeStamp), то есть тем выше число голосов за меньшее количество времени, тем выше будет песня в списке. Это работает, лучше, но все же не то, как мне это хотелось.

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

Я думаю, что я мог бы сортировать данные, чтобы нижние песни появлялись наверху, чтобы люди вынуждены видеть нижние песни. Честно говоря, мне никогда не приходилось работать над алгоритмом «популярности» раньше, так что, что вы думаете?

Сайт в http://www.songs.taphappysoftware.com - Я не знаю, должен ли я поместить это здесь или нет, может вызвать нежелательные песни на танцах: 0

Это было полезно?

Решение

Это очень хороший вопрос. Есть несколько подобных вопросов, которые здесь задавали.

Эта статья Вероятно, хорошее место для начала. Очевидно, Upvotes минус Downvotes - плохой способ сделать это. Лучший способ - использовать Сложная математика назначить счет каждому и сортировать этим.

Вот функция оценки в Ruby из статьи:

require 'statistics2'

def ci_lower_bound(pos, n, power)
    if n == 0
        return 0
    end
    z = Statistics2.pnormaldist(1-power/2)
    phat = 1.0*pos/n
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end

pos это количество положительного рейтинга, n общее количество рейтингов и power Относится к статистической мощности: выберите 0,10, чтобы иметь 95% вероятность того, что ваша нижняя граница верна, 0,05, чтобы иметь шанс 97,5% и т. Д.

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top