有哪些方法可以将总计集的多个(可能不兼容的)排序子集合并为总集的(部分)排序?

时间:2013-05-04 15:20:11

标签: algorithm sorting

我有一个排序问题,我很确定没有规范的“答案” - 但可能有许多不同的方法,每个都有利弊。我有兴趣听听一些不同的方法。

假设一群人{p_i | i=1,...,M}排名他们最喜欢的冰淇淋口味。总共有N种不同的口味,但是单个人p_i仅排列他或她最熟悉的n_i << N口味。我有兴趣将这些子排名组合成所有N种口味的合理整体排名。

对于具体情况:我的MN大致1000(巧合),每个n_i约为20。你可以假设人们的口味有足够的重叠,这样就没有味道完全“孤立”。

同样,即使没有一个明确的答案,我也有兴趣听到不同的方法来解决这个问题。谢谢!

2 个答案:

答案 0 :(得分:1)

解决这个问题的一种方法是构造一个有向循环图,表示对元素排序的所有约束。图中的节点将表示要比较的不同元素,如果有人排名第一个元素比第二个元素好,则第一个节点和第二个节点将有一个边缘。该图不会太大,可以通过为每个节点创建一个节点来构建线性时间。对象,然后根据首选项添加边缘。

此图表有两种可能性。首先,如果图形包含一个循环,则首选项中必定存在冲突,并且无法一致地对元素进行排序。其次,如果图形没有周期,那么图形的任何拓扑排序都会给出元素的整体一致排序,因为每个元素都将放在所有元素之后,它们传递到它之前。

希望这有帮助!

答案 1 :(得分:1)

我认为这个问题对于SO来说太开放了,但我会建议一个简单而有效的加权排名和后续总结。

我是这种方法,人们将他们的选择从1到20排列,其中1是他们的最爱,承载20和20的重量是他们最差的,权重为1。

一旦所有偏好都是所有权重的总和,你就有了排名。