2013-03-11 139 views
6

我想實現一個排行榜,我意識到即使這看起來是一個簡單的任務,但這可能變得非常複雜。我可以簡單地使用具有適當索引的數據庫,但我想知道是否有一個有效的數據結構可以支持以下操作。排行榜的高效數據結構

  • 加分值爲指定播放器
  • 找回最好成績爲指定播放器
  • 檢索排名爲指定播放器
  • 檢索上面和下面當前玩家等級
  • 支持得分球員不同的時間段:今天的得分,本週,今年等
  • 可擴展至〜100,000個玩家
  • 內存佔用儘可能小e(即在便宜的機器上運行)

感謝您的幫助!

+0

你有最大數量的分數/球員嗎?如果不是的話,如果你有100K的玩家,你可以得到很多分數......整個事情是否需要一次存儲在內存中,或者它可以主要在磁盤上(閃存,不管)?成績如何(0-255?0-65525?字符串?)。當你說「便宜的機器」時,你的意思是一臺舊電腦,而不是電話或Arduino。 – angelatlarge 2013-03-11 16:07:58

回答

0

你可以使用二叉搜索樹(平衡的如AVL或紅黑色)來存儲基於總分的玩家信息。在玩家結構中,您可以針對不同的時間框架使用不同的陣列,併爲總分和最佳分數提供單獨的變量。在特定玩家的下方或上方查找等級或玩家將需要進行遍歷。