【问题标题】:How do you build a ratings implementation?您如何构建评级实施?
【发布时间】:2010-09-07 06:43:11
【问题描述】:
在我们正在进行的项目中,我们需要一个“评级”系统,类似于 SO 中的系统。但是,在我们的系统中,有多个实体需要通过投票来“标记”(仅向上,从不向下,就像增量一样)。有时我们需要按照评分最高的顺序显示所有实体,不管实体类型如何,我猜基本上是混合结果集。您使用什么数据结构/算法来实现这一点,这样既灵活又可扩展?
【问题讨论】:
标签:
algorithm
database-design
architecture
data-structures
【解决方案1】:
由于 reddit 的排名算法很牛逼,如果不复制它,看看它是非常有意义的:
鉴于条目发布的时间 A 和 2005 年 12 月 8 日上午 7:46:43 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) = log10 z + (y • ts)/45000