Сортировка списка песен по популярности - PullRequest
9 голосов
/ 14 сентября 2010

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

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

В воскресенье я изменил алгоритм ранжирования на (upvotes - downvotes) / (CurrentTimestamp - CreationTimestamp), т. е. чем выше число голосов за меньшее время, тем выше будет песня в списке.Это работает, лучше, но все же не так, как мне бы хотелось.

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

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

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

Ответы [ 2 ]

6 голосов
/ 14 сентября 2010

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

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

Вот функция оценки в 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% и т. д.

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

0 голосов
/ 14 сентября 2010

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

...