我们正在开发的项目中需要一个“评级”系统,类似于SO中的项目。然而,在我们的实体中,有多个实体需要通过投票来“标记”(仅向上,从不向下,如增量)。有时我们需要按照评级最高的顺序显示所有实体,无论实体类型如何,基本上混合结果集,我想。您使用哪些数据结构/算法来实现这一点,以便灵活且可扩展?
答案 0 :(得分:6)
由于reddit的排名算法不断发展,如果没有复制它,看看它是非常有意义的:
考虑到条目发布时间A和2005年12月8日上午7:46:43 B的时间,我们将t s 作为它们之间的差异:
t s = 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
我们将评级作为函数ƒ(t s ,y,z):
ƒ(t s ,y,z)= log 10 z +(y•t s )/ 45000