我想编写一个小程序来帮助我根据大量一对一比较的结果对项目进行排名。
因此,如果我有 100 个项目,我会让用户在这组随机选择的两个项目之间反复选择。假设总共有 10.000 张选票。项目编号 10 在 1000 票中出现并赢得了与所有其他项目的所有直接对抗。项目编号 90人在100票中上来,赢了40票,输了60票。我可以利用现有的算法(例如来自推荐系统或类似系统)来构建这些项目的排名列表吗?
我想编写一个小程序来帮助我根据大量一对一比较的结果对项目进行排名。
因此,如果我有 100 个项目,我会让用户在这组随机选择的两个项目之间反复选择。假设总共有 10.000 张选票。项目编号 10 在 1000 票中出现并赢得了与所有其他项目的所有直接对抗。项目编号 90人在100票中上来,赢了40票,输了60票。我可以利用现有的算法(例如来自推荐系统或类似系统)来构建这些项目的排名列表吗?
win percentage
一种简单的方法是根据total wins/total confrontations
如果你想有一个单一的评分机制,你可以reward
将赢家和punish
输家按固定数量,然后根据最终得分排名。
最后,你可以看看Elo ranking algorithm
,它计算了每个项目赢得对抗的概率以及rewards and punishes
相对于这些概率。
例子
# Probability
A higher chance of winning than B
# Case1: A wins
A +small reward
B -small punishment
# Case2: B wins
A -large punishment
B +large reward
如果你只是想做你解释的事情(你没有要求任何优化或类似的东西),那么算法非常简单。
在伪代码中,这可能如下所示:
# given a list of elements:
elements = ...
# build the comparison matrix:
matrix = Matrix(n, n)
for i in 0..n-1:
for j in 0..n-1:
matrix[i][j] = elements[i] < elements[n]
# rank each element by its "wins":
for i in 0..n-1:
ranks[i] = sum(matrix[i])
在此之后ranks[i]
将说明elements[i]
每个i的排名,因此您可以elements
按ranks
.