Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 计算依赖项列表,给定多个子依赖项列表_Algorithm - Fatal编程技术网

Algorithm 计算依赖项列表,给定多个子依赖项列表

Algorithm 计算依赖项列表,给定多个子依赖项列表,algorithm,Algorithm,我有一个元素列表:a,B,C。。。 然后,我创建了多个依赖项列表,例如:B->C->H->X,A->C->I 根据前面的信息,我想计算所有元素的依赖项列表 问题是,解决方案可能不是没有冲突的(它们应该很少!)。例如,给定这些列表:A->B,B->A,A->B,我希望解决方案是A->B,因为错误小于B->A 我考虑了以下算法: 计算排名,如公式1所示:每个列表都是一场比赛,因此:第一名得到一定数量的分数,第二名得到更少的分数,以此类推。问题是如何加权和规范化这些点。。。我不知道该怎么做才对 也许

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

根据前面的信息,我想计算所有元素的依赖项列表

问题是,解决方案可能不是没有冲突的(它们应该很少!)。例如,给定这些列表:A->B,B->A,A->B,我希望解决方案是A->B,因为错误小于B->A

我考虑了以下算法:

  • 计算排名,如公式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
  • 所有元素都包含在列表中

博弈论有一个完整的分支研究这些问题。这是关于投票的:如果你让一群人独立地排列一组候选人,那么对整个群体来说,什么是公平的排列顺序?事实证明,要找到一个“完美”的系统是不可能的。看。@Heuster:真的很酷的东西,谢谢分享。@Heuster:很酷的thx。如果冲突很少,是否存在某种较弱的说法?因为这些依赖性并不是完全随机的。也许是一种算法来解决那些可忽略的冲突?@duedl0r我真的不知道,我根本不是这方面的专家。只是想提供一些特定的搜索词:-)@duedl0r:您需要定义“error”才能将其作为一个特定的问题。结果DAG不遵循的输入中的边数?