Algorithm 基于分数对用户进行排名的数据结构建议
我希望使用创建和维护内存中的列组 基于分数计算与用户ID和等级关联的分数。应支持以下功能Algorithm 基于分数对用户进行排名的数据结构建议,algorithm,data-structures,ranking,Algorithm,Data Structures,Ranking,我希望使用创建和维护内存中的列组 基于分数计算与用户ID和等级关联的分数。应支持以下功能 根据分数升序或降序对等级进行排序。在O(对数n)时间内插入或删除 给定一个用户id,在O(logn)时间内查找用户的排名/分数以及n个前后排名。例如,获取用户8347的等级,包括前5级和后5级 从任意偏移量x检索n个列组。例如,从800开始获得100个等级 考虑到这些要求,有没有关于哪种数据结构最适合这些要求的建议?我认为,结合使用顺序统计树和哈希表可以非常有效地实现这一点 顺序统计树是一种扩充的二叉搜
- 根据分数升序或降序对等级进行排序。在O(对数n)时间内插入或删除
- 给定一个用户id,在O(logn)时间内查找用户的排名/分数以及n个前后排名。例如,获取用户8347的等级,包括前5级和后5级李>
- 从任意偏移量x检索n个列组。例如,从800开始获得100个等级
考虑到这些要求,有没有关于哪种数据结构最适合这些要求的建议?我认为,结合使用顺序统计树和哈希表可以非常有效地实现这一点 顺序统计树是一种扩充的二叉搜索树,除了按排序顺序存储元素外,还允许按元素在树中的索引查找元素。也就是说,该结构支持O(lg n)插入、删除和按键查找值,以及给定索引的元素的O(lg n)查找。如果将分数存储在此结构中,则可以轻松插入或更新新分数,并跟踪树中每个元素的排名 为了将用户与其分数相关联,可以将此结构与从用户ID到订单统计树中保存该用户分数的节点的辅助哈希表映射相结合。这将给你O(1)访问一个球员的分数,除了O(lgn)查找分数的排名
希望这有帮助 使用内存中的SQLite数据库。优先级队列如何
每个人都有一个分数,将其放入优先级队列,然后它将按照升序/降序优先级/值/等级等进行排序。二叉搜索树,一个实现-
谢谢你的建议。我倾向于使用红黑树,它保存子级的数量(因此排名),但RB树的插入和删除(特别是在旋转时)似乎存在一些并发问题。我不明白有没有办法使用顺序统计树更新用户的排名?
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)