从源节点生成图的有效方法

时间:2019-05-31 18:44:04

标签: algorithm networkx graph-algorithm

假设我有一个图G,在每个节点周围,我有几个源节点xs。我必须使用G'节点创建一个新图xs=[[a, b, c], [d, e], [f]],以使它们不会与灰色甜甜圈发生冲突,如下图所示。

预期输出G'[[a, d, f], [a, e, f], [b, e, f]];所有其他人都在与一个灰色的甜甜圈发生冲突。

here

我目前通过对节点xs进行所有排列和组合来解决它。这适用于较小数量的节点,但是随着节点数量xs随着图G的增加而增加,很快就会尝试成千上万的组合。

我正在寻找一种有效的算法,该算法将帮助我加快处理速度,并以最少的迭代次数获得所有无冲突的图。

1 个答案:

答案 0 :(得分:0)

对于路径的每个阶段,您都有相当明显的最小边集。它们对于您的解决方案既必要又足够。为了符号上的方便,我将原始图形标记为X--Y--Z。您对应的G'节点是

X a b c
Y d f
Z f

您可以分两个步骤进行操作:

对于G中的每个边,您必须测试G`中每个可能的边的有效性。这包括

X--Y   [a, b, c] X [d, e]
    a total of 6 edges; 3 qualify: set XY = [a--d, a--e, b--d]
Y--Z   [d, e] X [f]
    a total of 2 edges; 2 qualify: set YZ = [d--f, e--f]

现在,您只需要生成Y个节点匹配的XY x YZ的所有组合即可。如果您按“内部”节点对列表进行排序,则可以非常快速地完成此操作

[a--d, b--d] x [d--f]
[a--e] x [e--f]

当前大多数语言都有可以为您执行组合的模块,因此代码足够简短。

这能让你前进吗?