我们正在开展的项目需要一个“评级”系统,类似于 SO 中的系统。然而,在我们的系统中,有多个实体需要通过投票“标记”(仅向上,从不向下,就像增量一样)。有时我们需要按照评级最高的顺序显示所有实体,无论实体类型如何,我猜基本上是混合结果集。您使用什么数据结构/算法来实现这一点,以便灵活且仍然可扩展?

有帮助吗?

解决方案

由于 Reddit 的排名算法很出色,如果不复制的话,看看它是非常有意义的:


鉴于该条目发布的时间为 A,时间为上午 7:46:43。2005 年 12 月 8 日 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

我们将评级作为函数 f(ts, ,y,z):

f(ts, y, z) = 对数10 z + (y•ts)/45000


许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top