我认为我正在搜索的算法有一个通用名称。
我有一个很大的玩家名单,按得分排序。例如,一百万或十亿玩家。 每隔一个玩家就会改变其分数,我希望更新排序列表以保持其排序,并且我希望知道新的玩家位置。
我可以更新得分并重新排序洞列表。 (效率不高) 或者我可以从 [oldpos, newpos] 重新排序(更好) 或者我可以移动玩家并移动其他玩家。 (最佳)
这种算法有名称吗?
常规数据库无法有效地处理该任务,我必须用 Java、C#、Go 等开发服务,将排序列表保留在 RAM 中并进行轮类,这是正确的吗?
最佳答案
您可以持有 AVL tree ,在这种数据结构上的插入和删除操作花费了 O(logn) 时间。每次您需要更新玩家时:从树中删除、更改分数、插入到树中。
这正是您正在寻找的权衡,所有操作都需要 O(logn),并且由于您需要所有操作(查找和更新 - 删除\插入),因此这是最适合您的。顺便说一句,内存消耗是 O(n)。
关于database - 更新排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43167750/