2013-03-11 158 views
6

我想实现一个排行榜,我意识到即使这看起来是一个简单的任务,但这可能变得非常复杂。我可以简单地使用具有适当索引的数据库,但我想知道是否有一个有效的数据结构可以支持以下操作。排行榜的高效数据结构

  • 加分值为指定播放器
  • 找回最好成绩为指定播放器
  • 检索排名为指定播放器
  • 检索上面和下面当前玩家等级
  • 支持得分球员不同的时间段:今天的得分,本周,今年等
  • 可扩展至〜100,000个玩家
  • 内存占用尽可能小e(即在便宜的机器上运行)

感谢您的帮助!

+0

你有最大数量的分数/球员吗?如果不是的话,如果你有100K的玩家,你可以得到很多分数......整个事情是否需要一次存储在内存中,或者它可以主要在磁盘上(闪存,不管)?成绩如何(0-255?0-65525?字符串?)。当你说“便宜的机器”时,你的意思是一台旧电脑,而不是电话或Arduino。 – angelatlarge 2013-03-11 16:07:58

回答

0

你可以使用二叉搜索树(平衡的如AVL或红黑色)来存储基于总分的玩家信息。在玩家结构中,您可以针对不同的时间框架使用不同的阵列,并为总分和最佳分数提供单独的变量。在特定玩家的下方或上方查找等级或玩家将需要进行遍历。