我想构建一个非循环图。
我需要自下而上构建这个,因为我一次只能构造一个节点数量有限的子图。我也可以在任何地方附上这样一个子图的根。
例如,假设我想构建下面的图(g)。边缘是朝向的,总是指向下方。还允许多个边缘,因为在G和I之间显而易见(我不认为它会对算法产生太大影响)。
A / | \ B | D | / | \ g = C E F | / G / \\ H I
假设我一次最多可以创建5个节点。该图可以以3个步骤构建。
首先,创建一个包含3个节点的子图(g1):
G g1 = / \\ H I
之后,我们可以更新另一个子图(g2),底部附有g1
D D | \ | \ E F E F g2 = | / = | / g1 G / \\ H I
最后我们可以组装图(g):
A A / | \ / | \ B | g2 B | D | / | / | \ g = C = C E F | / G / \\ H I
希望问题从示例中清楚可见。我正在尝试将algorihm放在一起,对于给定的DAG和最大尺寸标识这些部分或者得出结论,没有可用的解决方案。例如,如果最大尺寸为2,则图(g)不能被分割。
显然,在树上解决将是微不足道的。
这是否有一个alghoritm?此问题或类似问题是否有名称?