我希望让会员提交他们的前10名列表,或者他们的前10名排名,然后将一些算法结合起来。那里有什么东西吗?
谢谢!
答案 0 :(得分:1)
1 ALPHA
2 BRAVO
3 CHARLIE
1 ALPHA
2 DELTA
3 BRAVO
我们不能完全依靠伯爵......阿尔法显然应该获胜,尽管它与BRAVO拥有相同的选票。然而,我们必须避免只有少数第一名选票占据大量第10名选票的情况。为此,我建议如下:
$score = log($num_of_answers - $rank + 2)
第一名的价值可能会超过一分,而第十名则会获得0.3分。这种对数缩放可以防止荒谬的统治,但仍然会给排名带来分量。从这些示例投票(并假设它们是10个列表中的前3个),您将得到:
ALPHA: 2.08
BRAVO: 1.95
DELTA: .1
CHARLIE: .95
为什么呢?嗯,这是主观的。我觉得从一个很长的名单中可以看出,4,000张第10位的选票值超过1,000张第一名。您可以通过更改日志的基数(自然,2等)来扩展它,或者选择其他系统。
答案 1 :(得分:0)
您只需将用户提供的每个排名项目的总和相加,然后对其进行排序。
即:
A = (a,b,c)
B = (a,c,b)
C = (b,a,c)
D = (c,b,a)
E = (a,c,b)
F = (c,a,b)
a = 1 + 1 + 2 + 3 + 1 + 2 = 10
b = 2 + 3 + 1 + 2 + 3 + 3 = 14
c = 3 + 2 + 3 + 1 + 2 + 1 = 12
因此,
答案 2 :(得分:-1)
我认为您可以使用max flow algorithm解决此问题,以创建聚合排名,假设如下:
这应该会为您提供聚合前10名列表。