我对目前可能尚不存在的排名算法有疑问:
我有一个按分数排序的列表,例如以下列表(表示list-a):
现在我有了新的信息,知道列表应按如下排列(表示列表-b):
这里的问题是:如何为列表构建新的排名 - list-b中的后续限制?
我们可以说新列表必须:
这里的问题是list-b没有关于c,e,g的信息(在list-a中用红色标记)。现在我们需要构建列表的新排名 - 列表-b中的跟随限制。
我目前的解决方案:
当然我们可以通过以下方式使用强力策略来解决它:将列表中的缺失项c,e,g逐个添加到列表中,并通过以下方式找到最佳位置:
例如c,我们可以这样做:
当我们对不同的位置有相同数量的冲突时,我们选择第一个位置(我猜)。只需按照这种方式,我们就可以添加到最终项目。
这是我做这件事的“坏方法”,所以你对这个问题有什么更好的想法吗?因为我的列表真的很长(大约100万个项目),如果按照这种方式,它必须是太昂贵的计算。
期待听到您的建议。
答案 0 :(得分:0)
有趣的问题。我假设列表B也会有更新的分数。所以你可以做的是将List A变成一个字典,其中item是关键,value是得分。然后,您可以遍历列表B并在恒定时间内查找项目并更新分数。然后,您可以将字典恢复为集合并使用内置排序。这将在O(nlogn)中运行。希望这有帮助