-
09-06-2019 - |
题
我们正在开展的项目需要一个“评级”系统,类似于 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
不隶属于 StackOverflow