我想编写一个工具,处理一些树形结构的数据。(实际上,它将在Git修订DAG的类似树状子集上工作,但这对于此问题并不重要)。特别是,我想要一种算法,用于重建一个输入集中所有“连接点”组成的子树。
具体而言,我认为我需要:
我们有一些类型为
H
的对象,它具有“最近公共祖先”函数,在其中运行lca
。这使得H
具有类似树形的结构。算法以
H
的某个子集S
作为输入。输出应该是一个多叉树
t
,其节点由H
的值标记。t
应满足以下属性:S
中的所有元素都标记了t
的某个节点。t
的叶子节点只能由S
的元素标记。对于
H
的任何元素h
,其标记的节点不超过一个。如果
h1
标记为n1
,h2
标记为n2
,则lca(h1,h2)
标记为t
中n1
和n2
的最近公共祖先。
我的问题是:“这是一个已知的问题吗?是否有已知的算法?”我认为它与拓扑排序非常相似。我有一个基于归并排序的算法想法,但如果已经存在已知的算法,那就没必要自己发明了。