你可以在对结果进行排名时给它一个加权分数,而不是仅仅显示到目前为止的平均投票,通过乘以投票数的某个函数。
C# 中的一个示例(因为这是我碰巧最了解的......)可以很容易地翻译成您选择的语言:
double avgScore = Math.Round(sum / n);
double rank = avgScore * Math.Log(n);
在这里,我使用了 的对数n
作为加权函数——但它只有在投票数既不太小也不太大的情况下才有效。究竟有多大是“最佳”取决于您希望选票数量有多重要。
如果您喜欢对数方法,但 base10
并不真正适用于您的投票计数,您可以轻松地使用另一个 base。例如,要在 base 中执行此操作3
:
double rank = avgScore * Math.Log(n, 3);
您应该使用哪个函数进行称重可能最好由您期望达到的票数的数量级决定。
您还可以通过定义使用自定义加权函数
double rank = avgScore * w(n);
其中w(n)
根据投票数返回权重值。然后w(n)
,您可以根据需要定义,例如:
double w(int n) {
// caution! ugly example code ahead...
// if you even want this approach, at least use a switch... :P
if (n > 100) {
return 10;
} else if (n > 50) {
return 8;
} else if (n > 40) {
return 6;
} else if (n > 20) {
return 3;
} else if (n > 10) {
return 2;
} else {
return 1;
}
}