У меня есть программное обеспечение, похожее на Pandora, где пользователь может пролистнуть песню вверх или вниз. Программное обеспечение под названием Cavah представляет собой Silverlight + C#, но этот вопрос не зависит от языка и платформы.
Мое программное обеспечение должно выбирать песню на основе предпочтений пользователя. Для этого мне нужен хороший алгоритм.
Я хочу, чтобы мое программное обеспечение выбирало песню для воспроизведения с учетом следующих требований:
Следует отдавать предпочтение песням, на которых стоит большой палец, и регулярно их проигрывать.
Песни без рейтинга (не получившие ни одобрения, ни понижения) по-прежнему должны воспроизводиться; в конце концов, у пользователя может быть только 2 песни.
Пропущенные песни следует проигрывать редко.
Каким бы ни был алгоритм, песни не должны часто повторяться.
Учитывая эти проектные решения, есть ли здесь хороший алгоритм?
У меня есть код, который захватывает все песни, понравившиеся песни и не понравившиеся песни:
var allSongs = ...
var likedSongs = allSongs.Where(s => s.LikedByUser(...));
var dislikedSongs = allSongs.Where(s => s.DislikedByUser(...));
Любые простые идеи по выбору хорошей песни для пользователя?