-1

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

所以我想到的第一件事就是将收到的评分除以给出的总评分。例如,如果对象已从用户那里获得评分 2,并且该对象被评分的次数为 100,则可能会添加 2/100。但是我认为这种方法还不够好,因为 1) 一种天真的方法 2) 为了让我获得该对象被评级的次数,我必须在 db 上进行查找,这可能最终具有时间复杂度 O( n)

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

4

4 回答 4

1

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

  1. 将新评级添加到总和。
  2. 将总和除以评分的总次数。
于 2012-11-05T07:51:22.123 回答
1

有很多方法可以解决这个问题,但在此之前检查

  1. 如果所有反馈提供者同等对待或某些人比其他人更重要(如小组审查等)
  2. 如果目标是仅提供平均值或任何分数带等。考虑像这个网站这样的场景 - 显示总声誉分数
  3. 是的 - 如果要计算平均值,你需要有反馈的总数和数量,然后必须计算它 - 这就是简单的数学。但是,如果您需要任何其他方法,请为更多的计算周期做好准备。数据库命中和计算周期之间的平衡,但这是设计的下一个阶段。首先确定您的要求和解决方案的方法。
于 2012-11-05T07:54:26.860 回答
1

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

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

于 2012-11-05T07:58:13.553 回答
0

您是否考虑过对星星数量进行投票赞成/反对的机制?它不能直接解决您的问题,但值得注意的是,YouTube、Facebook、StackOverflow 等其他网站都使用 +/- 投票,因为它通常比基于星级的评级更有效。

于 2012-11-05T16:32:39.897 回答