在给定多个子依赖关系列表的情况下计算依赖关系列表

时间:2014-03-09 20:37:30

标签: algorithm

我有一个元素列表:A,B,C,...... 然后,我创建多个依赖性列表,例如:B-> C-> H-> X,A-> C-> I

鉴于以前的信息,我想计算所有元素的依赖列表。

问题是,解决方案可能不会没有冲突(它们应该是罕见的!)。例如,给定那些列表:A-> B,B-> A,A-> B我想解决方案是A-> B,因为误差小于B-> A。 / p>

我考虑过以下算法:

  • 计算公式1中的排名:每个列表都是一个种族,因此:第一个位置获得一定数量的点数,第二个位置获得更少,等等。问题是如何对这些点进行加权和标准化,......我不确定如何正确地做到这一点。
  • 也许就像网球的ATP评分一样;)然而,更多的事情最终导致更多的重量,这并没有给出好的结果。因为例如:A-> C,A-> C,A-> C,A-> B,B-> C应该导致A-> B-> C. ATP算法可能给C排名很高,因此解决方案可能是A-> C-> B,这不是我想要的。
  • 存储O(n ^ 2)关系和出现次数。例如,给定该列表:A-> B-> C,存储A-> B(1),A-> C(1),B-> C(1)。然后,如果添加第二列表:B-> C,则结果数据将是A-> B(1),A-> C(1),B-> C(2)。使用这些信息,计算排名。我认为这样我可以获得最完整的信息,现在问题是“仅”来计算所有元素的依赖列表:)缺点当然是你必须存储的数据量。

我个人最喜欢的是最后一个,但由于复杂性,我非常犹豫。我真的想要一个简单的算法和O(n)数据存储。这就是为什么我在这里问,希望有更好的解决方案或一些意见。

更新

  • 所选择的依赖项并非完全随机。它比随机投票更严格。实际上,依赖关系应该收敛到冲突很少的单一解决方案。因此,箭头的不可能性定理在这里不适用于100%(thx @Heuster)
  • 预期元素数量:小于100
  • 预期的列表数量:随着时间的推移缓慢增长,小于1000
  • 依赖项列表的最大长度:小于100
  • 所有元素都包含在列表中

0 个答案:

没有答案