5

我有一个排序问题,我很确定它没有规范的“答案”——但可能有许多不同的方法,每种方法都有优点/缺点。我有兴趣听到一些不同的方法。

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

对于一个具体的情况:我的MN都是粗略1000的(巧合),每个n_i都是大约20。您可以假设人们排名的口味有足够的重叠,因此没有一种口味是完全“孤立的”。

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

4

2 回答 2

1

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

我是这种方法,人们会将他们的选择从 1 到 20 进行排名,其中 1 是他们最喜欢的,承运人的重量为 20,而 20 是他们最差的,权重为 1。

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

于 2013-05-05T08:19:07.373 回答
1

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

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

希望这可以帮助!

于 2013-05-04T16:24:32.213 回答