当唯一的输入数据是叶节点的路径决策(以随机顺序)时,我正在寻找一种算法来构造可能的自上而下的树形结构。
如果叶子节点未通过该节点,则路径决策不附加[nodeID] +,如果叶子节点未通过该节点,则不附加[nodeID]-。输入示例:
上面示例输入中的一种可能的树结构是:
输出应该是节点列表,并且节点分别是父节点,如下所示:
如您所见,每个叶节点的可能位置不限于一个,因为输入数据不是完整的路径。示例中的Leaf1可以是节点D或节点I的子代。
您可以从任何数量的叶子中获取路径数据,但每个叶子只有一行数据。可能有叶子,您根本无法获得任何数据,并且您不知道树中有多少总叶子。路径数据中提到的所有节点都应该出现在输出表中,并且仅应为计算出的根分配任何父节点。
我想人们必须以某种方式组合来自每个Leaf路径的事实,例如从Leaf1您知道:A和E一定不能平行,而从Leaf2您知道A和我一定不能平行,所以在...
首选javascript,但也欢迎使用其他语言或伪代码!
答案 0 :(得分:1)
由于没有人回答,我会提出一些想法。
您从开始:
1: [A+, E+, H-]
2: [B-, A+, I+, D-]
3: [K+, G+, E+, C-]
4: [H+, A-, G-]
首先,搜索仅以+出现的节点。扎根。进行扫描,我们可以对节点E
,I
和K
进行此操作。因此,我们的答案始于:
E
E I
I K
我们的路径数据简化为:
1: [A+, H-]
2: [B-, A+, D-]
3: [G+, C-]
4: [H+, A-, G-]
现在我们有一个分区操作。为此,我们制作了一个图形,其中2个节点连接在一起(如果它们与+一起出现)。然后,我们通过连接的组件将节点分开,并将叶子划分为有+的分区(任何没有分区的叶子都可以在树中在那里成为叶子,然后丢弃)。删除任何内容-通过这种分离可以解决。在我们的例子中,这是一个完全断开的图,将每个节点放入其自己的分区中,并将路径数据分为3组(注意,我们丢失了所有-分区解释的规则):
1: [A+]
2: [A+]
3: [G+]
4: [H+]
现在我们解决了每个问题,最终解决了:
E
E I
I K
K A
K B
K C
K D
K G
K H
我相信这种方法只会在没有树的情况下无法取得进展。如果找到一棵树,它将找到一棵。