评级算法

时间:2012-11-05 07:45:42

标签: performance algorithm rating

我正在尝试为我正在开发的应用程序开发评级系统。基本上,app允许您将对象从1到5(由星号表示)进行评级。但我当然知道保持评级数并将评级加上数字本身可行。

因此,我脑海中出现的第一件事是将收到的评分除以给定的总评分。如果对象已收到用户的评级2,并且该次数是对象已被评为100可能加2/100。但是我认为这种方法不够好1)一个天真的方法2)为了让我得到对象被评级的次数,我必须查看db,这可能最终会有时间复杂度O( n)的

所以我想知道有什么替代方案可能更好来解决这个问题?

4 个答案:

答案 0 :(得分:1)

您可以在DB 2中保留其他值 - 评分次数和所有评级的总和。这种更新对象评级的方法只需要:

  1. 将新评级添加到总金额中。
  2. 将总和除以其评分的总次数。

答案 1 :(得分:1)

有很多方法,但在检查之前

  1. 如果所有反馈给予的人数相等或者某些人的权重比其他人更多(如小组审查等)
  2. 如果目标是仅提供平均或任何得分带等。考虑像这个网站的场景 - 显示总声誉得分
  3. 是的 - 如果要取平均值,你需要有反馈的总数和数量,然后必须计算它 - 这是简单的数学。但是如果您需要任何其他方法,请准备好更多的计算周期。数据库命中和计算周期之间的平衡,但这是设计的下一个阶段。首先得到您的要求和解决方案。

答案 2 :(得分:1)

我认为你应该为1星,2星,......保留单独的计数器以计算评级,你必须计算rating = (1*numOneStars+2*numTwoStars+3*numThreeStars+4*numFourStars+5*numFiveStars)/numOneStars+numTwoStars+numThreeStars+numFourStars+numFiveStars)

这样你就可以像亚马逊一样显示有多少人投票选出了1星,有多少人投了5星...

答案 3 :(得分:0)

您是否考虑过对星数的投票上调/下调机制?它并没有直接解决你的问题,但值得注意的是其他网站,如YouTube,Facebook,StackOverflow等都使用+/-投票,因为它通常比基于星级的评级更有效。