两个结果的最佳“交叉”算法?

时间:2011-01-22 15:02:46

标签: algorithm

我有两个结果,并希望得到这两个最好的“顺序”。 例如:

我们在一场比赛中有5人参赛,在另一场比赛中有7人参赛。结果是: 比赛1。

1. Karl
2. Fred
3. John
4. Peter
5. Sid

比赛2。

1. Steven
2. John
3. Karl
4. Peter
5. Aron
6. Fred
7. Kevin

questin是:这两场比赛的前7名是什么?

很明显,在这种情况下,nr 1是卡尔,因为他持有第一名和第三名,这比第二名和第三名更好。然而,史蒂文可能同样出色,但他只参加了一场比赛,并且应该受到某种惩罚。

针对此问题的已知算法是什么?有什么简单的解决方案吗?我只是想不出来

3 个答案:

答案 0 :(得分:2)

您可以将位置与权重相关联(将其视为点数) 例如,第一个位置的重量为20.第二个位置的重量为18个。第三个位置的重量等 参与未命中可能与-5的权重有关。 您可以根据需要调整数字。

要查找最终结果,请添加每个人的权重并比较数字。

我认为它应该有效..

答案 1 :(得分:1)

另一种方法是创建顶级节点的排序,这与先前种族的排序一致。这可以通过使用max-flow algorithm来完成。

答案 2 :(得分:0)

一个天真的解决方案是为所有玩家提供某种身份证明。浏览两个列表并将您遇到的任何新ID添加到单独的列表中,例如名为Positions。将这些ID的所有值设置为一个不能作为竞争位置的大数字,将其称为BIG_VAL(例如100)。浏览第一个列表并将所有位置标记为“位置”列表中的新值。这只是第一场比赛,所以这里没什么特别的。然后浏览第二个列表,将这些ID的第二个位置结果添加到“位置”列表中。对于未发生的ID,请在其结果中添加另一个BIG_VAL。列表现在将按顺序排列竞赛位置,剩下的就是对它们进行排序。 Karl将是4,John将是5,Fred将是8,依此类推:

http://bit.ly/fvYtal