【发布时间】:2014-05-30 09:16:22
【问题描述】:
我有一个关于排名算法的问题,目前可能还不存在:
我有一个按分数排序的列表,例如以下列表(表示 list-a):
现在我有了新的信息,知道该列表应按以下顺序排列(表示列表-b):
这里的问题是:如何为list-b中的list-a构建一个新的排名?
我们可以说新列表必须:
- 它必须遵循列表中的排名-b
- 尽量减少与列表-a 中排名的冲突。 (例如关于冲突:list-a 说 a>b,但现在我们说 b>a => 冲突)。
这里的问题是 list-b 没有关于 c、e、g 的信息(在 list-a 中用红色标记)。现在我们需要为list-b中的list-a构建一个新的排名。
我目前的解决方案:
确定我们可以通过以下蛮力策略解决它:将缺失的项目 c、e、g 一个一个添加到列表-b 中,然后通过以下方式找到最佳位置:
- 在 list-b 中为其选择一个位置(例如:a > c > d > b > f)
- 接下来检查与 list-a 的冲突次数,然后选择冲突较少的位置。
以c为例,我们可以这样做:
当我们在不同位置有相同数量的冲突时,我们选择第一个位置(我猜)。照着这个方法,我们就可以加起来就是最终的item了。
这是我的“坏方法”,所以你对这个问题有什么更好的想法吗?因为我的列表真的很长(大约100万条),如果按照这种方式,计算起来肯定太贵了。
期待听到您的建议。
【问题讨论】:
-
当每一个的位置有冲突时,如何确定c的放置位置?你为什么选择第一个而不是最后一个? (您的术语也非常令人困惑。我知道是否有许多可能的不冲突解决方案的算法,但如果没有不冲突的解决方案,我不确定如何处理。
-
由于项目 b 和 f 交换了相对位置(b>f 然后 f>b),你知道之前它们之间的每个元素都会有 2+ 冲突,处理这个问题的最好方法是把它们就在 b 和 f 之间。对吗?