Как вы строите реализацию рейтингов?
-
09-06-2019 - |
Вопрос
Нам нужна "рейтинговая" система в проекте, над которым мы работаем, аналогичная той, что используется в SO.Однако в нашем случае есть несколько объектов, которые нужно "пометить" голосованием "за" (только "вверх", никогда "вниз", как приращение).Иногда нам нужно будет показать все объекты в порядке наибольшего рейтинга, независимо от типа объекта, по сути, смешивая результирующие наборы, я полагаю.Какие структуры данных / алгоритмы вы используете для реализации этого, чтобы это было гибким и по-прежнему масштабируемым?
Решение
Поскольку алгоритм ранжирования reddit потрясающий, имеет смысл взглянуть на него, если не скопировать:
Учитывая время, когда запись была опубликована, и время 7:46:43 утра.8 Декабря 2005 B у нас есть ts как и их разница в секундах:
ts = A - B
и x как разница между количеством голосов "за" U и количеством голосов "против" D:
x = U - D
Где
y = 1 if x > 0
y = 0 if x = 0
y = -1 if x < 0
и z как максимальное значение абсолютного значения x и 1:
z = |x| if |x| >= 1
z = 1 if |x| < 1
у нас есть рейтинг как функция ƒ(ts, y, z):
ƒ(ts, y, z) = логарифм10 z + (y • ts)/45000