我认为我正在搜索的算法有一个共同的名字。
我有一大串按分数排序的球员。例如100万或10亿玩家。
每秒钟都有一名球员在改变自己的得分,我希望更新排序列表以保持排序,我希望知道一个新的球员位置。
我可以更新分数和重新排序孔列表。(效率不高)
或者我可以从[oldpos,newpos]重新排序(更好)
或者我可以移动玩家并移动其他玩家。(最好)
这种算法有名字吗?
常规数据库不能有效地处理这个任务,而我必须用java、c、go等语言开发服务,以便将排序列表保存在ram中并进行转换,这是正确的吗?

最佳答案

您可以保留一个AVL tree,插入和删除操作在这种数据结构上花费了o(logn)时间。每次你需要更新一个玩家:从树上移除,改变分数,插入到树上。
这是您正在寻找的确切折衷方案,所有操作都采用o(logn),并且由于您需要所有操作(查找和更新-删除/插入),因此这是最适合您的。内存消耗是o(n)btw。

关于database - 更新排序列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43167750/

10-13 08:05
查看更多