如何合并有序首选项的集合

时间:2011-06-15 02:05:13

标签: algorithm merge

我有一组评价一组n个对象的评论员。每个评论者独立地生成他或她选择排名的对象的有序列表。目标是生成一个列表,该列表是各种有序列表的排序规则。我们可以假设每个评论者的观点具有相同的权重。

这与大多数合并和排序列表问题的不同之处在于没有全局排序。一位评论者可以评价A> B而另一个可以评价B>答:如上所述,每个评论者都不一定要评价每个对象。

我目前的想法是将每个评论者的列表分解为列表中每个m *(m-1)* .5个唯一条目对的一组有序元组,其中m是评级的对象数。现在从所有评论者那里获取所有元组。对于给定的组合(a,b),找到所有这样的元组并将多数投票(那些投票中)作为是否<的确定者。湾

现在我有一组有序的元组代表了所有人的智慧。但是如何将这些变成一个有序列表呢?我可以从随机选择的一对对象开始,然后对它们进行排序,然后按正确的顺序添加另一个,但输出将取决于我选择从哪一个开始。也可能有循环。

我很感激任何想法。

4 个答案:

答案 0 :(得分:26)

您导航的问题空间基本上(同构)投票理论的一个子集,即投票和结果都是有序候选人名单的部分。

您可能会从阅读以下内容中受益:

根据我对投票理论的了解,我会给你一个建议:如果你有理由相信O(n 3 )算法对你的特定数据集是可行的,那么试试{ {3}}。否则,Schulze Method是唯一一个在O(n)时间内运行的Borda Count方法,并将排名作为选票输入,因此请坚持使用。

答案 1 :(得分:9)

一个看似优雅且仍然需要做的事情的解决方案是将每个订单转换为从1到0的分数,其中1是给定评论者列表中的第一个(顶部)排名项目,0是他们的最后一个(底部项目)和其间的所有项目获得线性缩放分数。因此,如果评论者1只对3个项目进行排名,那么他们将获得该分数为1,0.5和0的分数。然后,您只需获取每个项目的平均分数即可生成整理列表。可以通过项目的“评论”数量来打破关系(以便3个评论者一致标记为最佳的项目在最终列表中看起来比2个评论者一致标记为最佳的项目更高等)。

您的要求“目标是生成一个列表,该列表是各种有序列表的整理。我们可以假设每个评论者的观点具有相同的权重。”这个简单的算法肯定能满足这个要求,但是一旦你深入研究这些问题,这些问题往往会有一些复杂的要求。

答案 2 :(得分:3)

合并排名有点不重要。我想也许您需要更清楚地了解“有序列表的整理”是什么意思 - 即您希望它拥有哪些属性?

例如,参见CS course notes from Cornell。鉴于全局排名应具有的一些合理合理的属性,实际上不可能创建一个绝对满足这些属性的算法。您可能需要妥协您将接受的全球排名的合理属性。

答案 3 :(得分:1)

产品: 杜克永远 雷神之锤 UT3 Duke3d 卤素

REV1:
- Duke nukem forever
- Duke3d

REV2:
- Duke3d
- UT3
- Quake

REV3:
- Duke3d
- Duke nukem forever

逻辑演绎:

  • REV1:杜克永远> duke3d#
  • REV1:Duke3d<杜克永远##
  • REV2:Duke3d> UT3%
  • REV2:UT3< Duke3d%
  • REV2:Duke3d> Quake %%
  • REV2:Quake< Duke3d %%
  • REV2:UT3> Quake %%%
  • REV2:Quake< UT3 %%%
  • REV3:Duke3d>杜克永远#
  • REV3:Duke永远< Duke3d ##

多数投票:

  • Duke3d 3
  • 杜克永远2
  • UT3,Quake 1

通过创建矛盾对并转换为=来删除与之相矛盾的# 接受成对匹配的%。 集团计数一切。 如果有<和=矛盾,真实的是更多的计数。

过滤然后按逻辑排序:

  • Duke3d,杜克永远
  • UT3
  • 地震

但排序应受投票数(贝叶斯排序)的影响。那样Duke3d就会赢。

Halo不能放在任何地方,因为它没有被投票......