我有一些元素已与其他元素进行比较,无论输赢。没有完整的数据,例如所有元素与所有其他元素相比较。相反,我有一个这样的列表:
win_id | lose_id
12 73
992 25
22 12
2382 999
etc etc
我想为大量的元素找到一个相当快的算法,这也考虑到赢得很多胜利的人(被认为比正常胜利更重要)。
Elo是不是一个很好的选择,还是有一些东西可以运行得更快?我的单独用例将是:
寻找前10名(需要准确)
寻找整体位置(不需要完美的准确度)
答案 0 :(得分:1)
您是否考虑过将ELO与红黑树相结合以保持数据的排序? ELO是你所描述的自然选择,它的速度和你所希望的一样快,因为更新ELO是一个恒定的时间操作。
然后,您可以使用红黑树保持整个数据集按ELO排序。每当发生新匹配时,更新将采用O(log n):O(1)重新计算每个ELO分数,然后采用O(log n)重新配置红黑树。您描述的所有其他操作:查找前10个,或计算任何给定元素的等级,或查找第n个元素,都将是O(log n)操作。