我应该选择哪种数据结构?

时间:2013-10-31 23:23:06

标签: data-structures

我正在考虑列出游戏的最高分。超过30万名球员将按其最高分排名。玩家可以通过输入他们的名字和新的最高分来更新他们的高分。一次只显示10个分数,用户可以键入他们想要开始的位置。因此,如果他们输入“100100”,那么整个列表应该刷新,并通过100,109分给他们显示100,100的分数。那么在这种情况下我应该使用什么数据结构?我想使用 hashTable 将用户名作为键,需要花费一些时间来更新他们的分数。但是如果用户之前的分数是100,100,并且在他更新了他的分数之后,他的分数成为整个列表中最高的分数呢?然后,如果使用哈希表,它将需要线性时间,因为我需要比较列表中的每个分数以确保是最高分。因此,是否有更好的数据结构可供选择,使用 hashTable

2 个答案:

答案 0 :(得分:1)

使用带有分数键的地图(有序树)容器和带有名称键的哈希。让值成为存储在列表或数组等中的实体的链接,即将数据存储为您需要快速执行的不同访问的make indeces。

答案 1 :(得分:1)

您应该选择针对最常见操作优化的数据结构。根据您对有序列表的描述,最常见的操作可能是查看列表(并在其中跳转)。

如果您使用具有用户姓名的哈希表作为键,则显示按分数排序的列表将非常昂贵,而当查看者在列表中跳过时,计算不同视图的代价非常昂贵。

相反,使用按分数排序的简单列表将使所有"视图"操作非常便宜且非常容易实现。当用户更新其分数时,只需按名称对用户进行线性(O(n))搜索,然后删除其旧条目。然后,由于列表已排序,您可以在O(log n)时间搜索它,以查找在列表中重新插入新条目的位置。