Вы можете весить песни;скажем, каждая песня имеет вначале 1,0 балл, 0,5 - большой палец вниз и 1,5 - большой палец вверх.Затем вы выбираете случайный элемент из набора всех баллов, вероятность которого, тем не менее, определяется его весом.Быстрый и грязный подход, о котором я бы подумал, заключался бы в суммировании по всем весам.Выберите случайное число меньше этой суммы.Перебирайте все песни, пока CurrentWeight + SongWeight> RandomNumber (иначе CurrentWeight + = SongWeight)
Конечно, вы можете сделать это произвольно более сложным, введя совместную фильтрацию:)
Представьте себе пять песен.Первые два подняты вверх, следующий - вниз, два нейтральных.
{1: 1.5, 2: 1.5, 3: 0.5, 4: 1, 5: 1}
Сумма этого5,5.Теперь мы выбираем случайное число <5,5 и видим: это 2,43789 </p>
Теперь давайте найдем песню, которой принадлежит это случайное число.
Начнем с CurrentWeight = 0. Вес первой песни = 1,5.CurrentWeight + 1.5 <2.43789 -> мы продолжаем, но увеличиваем CurrentWeight на вес этой песни.
Итак, CurrentWeight = 1,5 сейчас.Вес следующей песни: снова 1,5.Но теперь CurrentWeight + 1.5 == 3> 2.43789.Это означает, что мы выбрали вторую песню!
То, что вы здесь делаете, это в основном выбирает случайное место в строке, но увеличивает «территорию» в этой строке, которая выберет песню, если песня будет пролистана вверх.
Создает ли это много повторений или нет, в основном зависит от того, насколько сильно вы увеличиваете / уменьшаете вес песен.