Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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_Language Agnostic_Math_Graph - Fatal编程技术网

Algorithm 需要一些帮助来理解最大化图形连接的问题吗

Algorithm 需要一些帮助来理解最大化图形连接的问题吗,algorithm,language-agnostic,math,graph,Algorithm,Language Agnostic,Math,Graph,我想知道是否有人能帮我理解这个问题。我准备了一个小图表,因为它更容易直观地解释它 我试图解决的问题: 1。构建依赖关系图 给定图的连接性和确定一个节点对另一个节点依赖程度的度量,对依赖项排序。例如,我可以加入一些规则来说明 节点3依赖于节点4 节点2依赖于节点3 节点3依赖于节点5 但是,因为最终的规则不是“有价值的”(同样基于相同的度量),所以我不会将该规则添加到我的系统中 2。执行请求订单 一旦我构建了一个依赖关系图,就按照最大化最终连接的顺序执行列表。我不确定这是否真的是一个问题,但

我想知道是否有人能帮我理解这个问题。我准备了一个小图表,因为它更容易直观地解释它

我试图解决的问题:

1。构建依赖关系图 给定图的连接性和确定一个节点对另一个节点依赖程度的度量,对依赖项排序。例如,我可以加入一些规则来说明

  • 节点3依赖于节点4
  • 节点2依赖于节点3
  • 节点3依赖于节点5
但是,因为最终的规则不是“有价值的”(同样基于相同的度量),所以我不会将该规则添加到我的系统中

2。执行请求订单 一旦我构建了一个依赖关系图,就按照最大化最终连接的顺序执行列表。我不确定这是否真的是一个问题,但我有一种感觉,可能存在多个订单,在这种情况下,需要选择最佳订单

首先也是最重要的是,我想知道我是否正确地构造了问题,是否应该知道任何角落的情况。第二,是否有一个密切相关的算法,我可以看看?目前,我正在考虑类似或的事情,但我现在有点困惑。有什么建议吗


附言:我自己对这个问题有点困惑,所以请不要为此向我发火。如果需要任何澄清,我将尝试更新问题。

看起来您正在尝试确定发送到节点之间具有依赖关系(或“谷歌偏序”)的节点的请求的排序

如果你在谷歌上搜索“偏序依赖关系图”,你会得到一个指向的链接,该链接将为你提供足够的信息,让你找到一个好的解决方案


通常,您希望以这样一种方式对节点进行排序,即节点位于其依赖项之后;又名拓扑排序。

我对您的排序约束与您绘制的图形有点困惑:没有匹配的。这就是说,听起来你有软排序约束(A应该排在B之前,但不一定要排在B之前),违反约束的代价,但我敢打赌,使用偏向于大权重边的DFS,然后删除所有后边,您可以得到一个非常好的时间表。

如果您事先知道每个节点的依赖关系,您可以轻松构建层

这很有趣,但我在组织时遇到了同样的问题。。。我的应用程序的不同模块的编译:)

想法很简单:

def buildLayers(nodes):
  layers = []
  n = nodes[:] # copy the list
  while not len(n) == 0:
    layer = _buildRec(layers, n)

    if len(layer) == 0: raise RuntimeError('Cyclic Dependency')

    for l in layer: n.remove(l)
    layers.append(layer)
  return layers

def _buildRec(layers, nodes):
  """Build the next layer by selecting nodes whose dependencies
     already appear in `layers`
  """
  result = []
  for n in nodes:
    if n.dependencies in flatten(layers): result.append(n) # not truly python
  return result
然后您可以一次弹出一个层,每次您都可以并行地将请求发送到该层的每个节点

如果保留一组已选择的节点,并且依赖项也表示为一个集合,则检查效率更高。其他实现将使用事件传播来避免所有这些嵌套循环


请注意,在最坏的情况下,您有O(n3),但我只有大约30个组件,并且没有相关的组件:p

谢谢您的输入。很抱歉搞混了。我在问题中确实提到了这一点。我还处于形成问题的阶段,所以请原谅我搞砸了:)谢谢你的意见。我想我正在寻找一种拓扑排序。唯一的下一步是找出一个好方法,用我的图构造一个DAG。再次感谢。谢谢你抽出时间。我想我们两个都在两个不同的领域解决同一个问题:)我的问题还有一个限制:我还没有决定一个合适的度量来决定一个节点如何依赖另一个节点。