建议基于分数对用户进行排名的数据结构

时间:2011-03-24 04:40:28

标签: algorithm data-structures ranking

我希望在内存中使用创建和维护等级。

根据分数计算与用户ID和排名相关联的分数。应支持以下功能。

  • 根据分数上升或下降对排名进行排序。在O(log n)时间内插入或删除。
  • 给定用户ID,在O(log n)时间内查找用户的排名/分数以及n个前后排名。例如。获得具有5个前后排名的用户8347的排名。
  • 从任何偏移x中检索n个排名。例如。从800
  • 开始获得100个排名

鉴于这些要求,对于哪种数据结构最适合这些要求有什么建议吗?

4 个答案:

答案 0 :(得分:8)

我认为您可以使用订单统计树和哈希表的组合非常有效地完成此操作。

订单统计树是一种扩充二进制搜索树,除了按排序顺序存储元素外,还允许通过树中的索引查找元素。也就是说,该结构支持按键的O(lg n)插入,删除和查找值,以及给定其索引的元素的O(lg n)查找。如果您将分数存储在此结构中,则可以轻松插入或更新新分数,以及跟踪树中每个元素的等级。

为了将用户与他们的分数相关联,您可以将此结构与从用户ID映射到包含该用户分数的订单统计树中的节点的辅助哈希表结合起来。除了O(lg n)查找分数排名之外,这还可以让你(1)访问玩家的分数。

希望这有帮助!

答案 1 :(得分:0)

使用内存中的SQLite数据库。

答案 2 :(得分:0)

优先级队列怎么样?

每个人都有一个分数,把它扔进优先级队列,它会按升序/降序优先级/值/等级/等进行排序。

答案 3 :(得分:0)

二分查找树,一个实现 - http://en.wikipedia.org/wiki/AA_tree

Space   O(n)            O(n)
Search  O(log n)    O(log n)
Insert  O(log n)    O(log n)
Delete  O(log n)    O(log n)