假设我有一个图G
,在每个节点周围,我有几个源节点xs
。我必须使用G'
节点创建一个新图xs=[[a, b, c], [d, e], [f]]
,以使它们不会与灰色甜甜圈发生冲突,如下图所示。
预期输出G'
为[[a, d, f], [a, e, f], [b, e, f]]
;所有其他人都在与一个灰色的甜甜圈发生冲突。
我目前通过对节点xs
进行所有排列和组合来解决它。这适用于较小数量的节点,但是随着节点数量xs
随着图G
的增加而增加,很快就会尝试成千上万的组合。
我正在寻找一种有效的算法,该算法将帮助我加快处理速度,并以最少的迭代次数获得所有无冲突的图。
答案 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]
当前大多数语言都有可以为您执行组合的模块,因此代码足够简短。
这能让你前进吗?