2015-12-05 26 views
0

我有一个旧的评级从数据库,并从用户, 我试图寻找“排名算法的”一个新的评级,但他们节省每用户的收视率。在我的情况下,我不保存以前的评级。我的等级酒吧是高达5有一个算法来解决目前的评级,现在呢?

最大,目前我的解决办法是oldR + newR/2这是否有道理?

回答

0

不是真的。当你考虑它时,这样一个公式意味着较新的投票权比旧投票权要多得多。试想票的顺序是这样的:

Vote:  1 1 1 1 1 1 1 1 1 1 1 5 
Rating: 1 1 1 1 1 1 1 1 1 1 1 3 

显然评级不应该在这种情况下是3,但仍然应该是1(或在最坏的情况2),但您的公式将是。

至少,你应该保存的投票数以及平均等级,让您来计算newR = ((oldR*votesCast)+newVote)/(votesCast+1)。这也需要以更高的精度存储评分,而不仅仅是整数。 (当你显示它时,你可以将其舍弃,但是在内部你也应该跟踪分数。)

一个稍微好一点的解决方案是分别存储迄今为止已经为5个不同的评级投了多少票,让你计算不同种类的装置(几何例如)。

而且显然是最灵活(但大多数存储和计算密集型)是存储与用户ID和时间戳每个人投票,让您使用您能想到的任何算法。