Вопрос

Нам нужна "рейтинговая" система в проекте, над которым мы работаем, аналогичная той, что используется в 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


Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top