选择胜利系统的排序算法失去

时间:2013-10-01 23:29:42

标签: algorithm sorting

我有一些元素已与其他元素进行比较,无论输赢。没有完整的数据,例如所有元素与所有其他元素相比较。相反,我有一个这样的列表:

win_id | lose_id
12       73
992      25
22       12
2382     999
etc etc

我想为大量的元素找到一个相当快的算法,这也考虑到赢得很多胜利的人(被认为比正常胜利更重要)。

Elo是不是一个很好的选择,还是有一些东西可以运行得更快?我的单独用例将是:

寻找前10名(需要准确)

寻找整体位置(不需要完美的准确度)

1 个答案:

答案 0 :(得分:1)

您是否考虑过将ELO与红黑树相结合以保持数据的排序? ELO是你所描述的自然选择,它的速度和你所希望的一样快,因为更新ELO是一个恒定的时间操作。

然后,您可以使用红黑树保持整个数据集按ELO排序。每当发生新匹配时,更新将采用O(log n):O(1)重新计算每个ELO分数,然后采用O(log n)重新配置红黑树。您描述的所有其他操作:查找前10个,或计算任何给定元素的等级,或查找第n个元素,都将是O(log n)操作。