Я использую для своих музыкальных файлов следующий метод:
Рейтинг измеряется в процентах (0-100)
Песни, которые не оценены, получают 50% в подарок
Каждый раз, когда кто-то голосует за песню, ее рейтинг увеличивается
Каждый раз, когда кто-то голосует против песни, ее рейтинг уменьшается
Если рейтинг песни превышает MAX, равный 100, то MAX устанавливается на текущий рейтинг песни.
Если рейтинг песни опускается ниже MIN, то MIN устанавливается на рейтинг песни
После каждого голосования, которое меняет MIN или MAX, я делаю нормализацию для каждой песни в списке следующим образом:
NewRating = (CurrentRating - MIN) * 100 / (MAX -MIN) Затем я возвращаю MIN к 0, а MAX к 100.
Этот метод дает равные шансы для старых и новых песен быстро получить правильный рейтинг. Также каждый голос за лучшую и худшую песню влияет на других, что я тоже считаю правильным.
При выборе песен для воспроизведения (или голосования) я генерирую случайное число в диапазоне от 0 до 100 и ищу следующую песню с рейтингом, равным или превышающим это число.
Плохие песни идут вниз и выбираются редко, хорошие песни поднимаются и выбираются чаще, но я все еще оставляю шанс, что даже худшая песня будет сыграна (проголосована) в будущем.