根据新的部分排名重新排序排名列表

时间:2014-05-30 09:16:23

标签: algorithm sorting ranking

我对目前可能尚不存在的排名算法有疑问:

我有一个按分数排序的列表,例如以下列表(表示list-a):

enter image description here

现在我有了新的信息,知道列表应按如下排列(表示列表-b):

enter image description here

这里的问题是:如何为列表构建新的排名 - list-b中的后续限制?

我们可以说新列表必须:

  1. 必须遵循list-b
  2. 中的排名
  3. 尽量减少列表中的排名冲突-a。 (例如关于冲突:list-a表示a> b,但现在我们说b> a =>冲突)。
  4. 这里的问题是list-b没有关于c,e,g的信息(在list-a中用红色标记)。现在我们需要构建列表的新排名 - 列表-b中的跟随限制。

    我目前的解决方案:

    当然我们可以通过以下方式使用强力策略来解决它:将列表中的缺失项c,e,g逐个添加到列表中,并通过以下方式找到最佳位置:

    • 在list-b中为它选择一个位置(例如:a> c> d> b> f)
    • 接下来检查与list-a冲突的数量,然后选择冲突较少的位置。

    例如c,我们可以这样做:

    enter image description here

    当我们对不同的位置有相同数量的冲突时,我们选择第一个位置(我猜)。只需按照这种方式,我们就可以添加到最终项目。

    这是我做这件事的“坏方法”,所以你对这个问题有什么更好的想法吗?因为我的列表真的很长(大约100万个项目),如果按照这种方式,它必须是太昂贵的计算。

    期待听到您的建议。

1 个答案:

答案 0 :(得分:0)

有趣的问题。我假设列表B也会有更新的分数。所以你可以做的是将List A变成一个字典,其中item是关键,value是得分。然后,您可以遍历列表B并在恒定时间内查找项目并更新分数。然后,您可以将字典恢复为集合并使用内置排序。这将在O(nlogn)中运行。希望这有帮助