我有一系列的元素,它们被与其他元素进行了比较,要么赢要么输。与所有其他元素相比,没有完整的数据,例如所有元素相反,我有一个这样的列表:

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

我想为大量元素找到一个相当快速的算法,这也考虑到了战胜一个赢得很多的人(会被认为比战胜一个普通人更重要)。
埃洛是个不错的选择,还是有什么东西能跑得更快我的独立用例是:
找到前10名(需要准确)
寻找整体位置(不需要完全精确)

最佳答案

你有没有考虑过把elo和红黑树之类的东西结合起来来保持数据的排序?elo是您描述的内容的自然选择,而且它是您所希望的最快速度,因为更新elos是一个恒定的时间操作。
然后,您可以使用红黑树将整个数据集按elo排序。每当发生新的匹配时,更新将采用O(log n):O(1)重新计算每个ELO得分,然后采用O(logn)重新配置红黑树您描述的所有其他操作:查找前10个,或计算任何给定元素的秩,或查找第n个元素,都将是o(logn)操作。

关于algorithm - 选择输赢系统的排序算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19127698/

10-11 23:00