为具有20k +条目的ELO评级系统选择什么数据结构?

时间:2014-02-16 08:44:55

标签: java data-structures tree

我有一些具有以下属性的对象(目前为20 000 +)

Object
----------
String name
int    rating

我想为所有这些对象创建ELO评级。这意味着以下内容:

  1. 要调整彼此匹配的2个对象的ELO,我需要在name列表中找到这些对象。

  2. 显示列表我需要按rating订购每个对象。

  3. 整个程序将用Java实现,但我认为它独立于编程语言。

    目前我不确定为此项目选择哪种数据模型。一位朋友建议我使用2-4树来插入name排序的对象,这样我就可以快速更改每个对象的等级。

    然而,对象按照rating而不是按名称的顺序打印,我不想在每次输出列表时对这么多对象进行排序。

    由于我对数据结构很陌生:解决这个问题的常用方法是什么? 创建由rating排序的另一棵树? 有一个ratings列表,每个评级都链接到当前具有该评级的每个对象?

    编辑:ELO评级是从一组对象到整数的映射。每个对象只获得一个评级,但评级可以有多个与之关联的对象。

2 个答案:

答案 0 :(得分:0)

  

创建按评级排序的另一棵树?有一个评级列表和每个评级链接到目前具有该评级的每个对象?

嗯,这是一种方法,但是因为你有20K +条目,所以也会占用很大的空间。

我现在能想到的最好方法是:
使用multimapkey = namevalue = ratings等数据结构。
这样,每次在multimap中插入新的object时,都需要O(logN)时间。

要查找具有相同name使用equal_range的所有评分,这也是O(logN)操作。

希望这有帮助!

答案 1 :(得分:0)

以{8}作为键的HashMap会在匹配元素时为您提供O(1)效果,保持TreeSet的评分为Comparator,您将拥有该项目订购。虽然如果评级发生变化,您将需要重新插入元素。