在项目之间反复选择后确定排名的算法

Algorithm for determing a ranking after choosing repeatedly between to items

我想编写一个小程序来帮助我根据大量一对一比较的结果对项目进行排名。

因此,如果我有 100 件商品,我会让用户在该集合的两个随机选择的商品之间重复选择。假设总共有 10.000 票。货号10 人获得 1000 票,并赢得了与所有其他项目的所有直接对抗。货号100票上来90,直接交锋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

如果你只想做你解释的事情(你没有要求任何优化或类似的),那么算法很简单。

  1. 构建所有可能比较的矩阵。
  2. 根据列中的获胜数量对每个元素进行排名。

在伪代码中,这可能如下所示:

# 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] 将说明每个 ielements[i] 的排名,因此您可以按 [= 对 elements 进行排序14=].