我想写一个小程序来帮助我基于大量一对一比较的结果对项目进行排名。
因此,如果我有100个项目,我会让用户在该组的两个随机选择的项目之间反复选择。假设总共有10.000票。项目编号10人以1000票得票,赢得了与其他所有物品的直接对抗。项目编号90人以100票得票,赢得40票,输掉60笔直接对抗。 是否可以使用现有算法(例如来自推荐系统或类似系统的算法)来构建这些项目的排名列表?
答案 0 :(得分:2)
一种简单的方法是根据win percentage
的{{1}}进行排名
如果您希望拥有一种单一的计分机制,则可以total wins/total confrontations
将赢家和reward
输掉一个固定的数量,然后根据最终得分进行排名。
最后,您可以查看Elo ranking algorithm
,它计算出每个项目赢得对抗的概率和punish
相对于这些概率。
示例
rewards and punishes
答案 1 :(得分:1)
如果您只是想做您所解释的(您没有要求任何优化或类似的操作),那么该算法非常简单。
在伪代码中,它可能看起来像这样:
# 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]
将说明每个 i 的elements[i]
的等级,因此您可以按elements
对ranks
进行排序。 / p>