从此question了解累计平均值。
答案看起来很普通。但是,如果用户可以编辑评级,我试图找到是否可以使用相同的方法。我试图知道接受的答案的用户是怎么想的,但他没有回复。所以我正在创建一个新问题。
每次获得新评分时,请更新累计平均值 评分数:
new_count = old_count + 1
new_average = ((old_average * old_count) + new_rating) / new_count
如果用户可以编辑评级:
new_count = old_count // With a rating edit, the count will be the same
new_average = ?
答案 0 :(得分:1)
您必须减去旧值并添加新内容:
new_average = old_average + (new_rating - old_rating) / count
这意味着您必须在某处存储所有旧评级。但是,如果您的用户要编辑它们,那么可能您在某个地方有旧值。
答案 1 :(得分:1)
执行此操作的正确方法是保持运行总和S
并计算C
。添加新评级R
后,更新规则如下。
(S, C) <- (S + R, C + 1) | When a new rating R is added.
(S, C) <- (S - R, C - 1) | When a rating R is removed.
要随时获得平均值,只需评估S / C
即可。如果修改了属于S
的评分,请按以下步骤更新,其中R0
为旧评级,R1
为新评级。
(S, C) <- (S - R0 + R1, C) | When rating R0 is changed to R1.
没有理由将您的数据存储为平均A
和计数C
。它只会使更新变得更加复杂。
(A, C) <- ((CA + R) / (C + 1), C + 1) | When a new rating R is added.
(A, C) <- (A + (R1 - R0) / C, C) | When rating R0 is changed to R1.