Algorithm 为集合集生成最小树

Algorithm 为集合集生成最小树,algorithm,tree,set,language-agnostic,discrete-optimization,Algorithm,Tree,Set,Language Agnostic,Discrete Optimization,是否有任何已知的算法可以使用最少数量的节点从集合中构建树 例如,我有以下几套: 1。{A,B,C} 2.{B,C} 3.{D,B,A} 4.{C,A} 每个集合都由从根到叶的路径表示。它们是集合,因此节点在路径中的显示顺序并不重要 我需要一个使用尽可能少的节点的树,它将所有给定的集合表示为路径。一种可能的解决方案(不确定是否最小)是: 0 / \ C A / \ \ A、B、B / \ \ \ 4B2D | | 1 3 其中根节点0是某

是否有任何已知的算法可以使用最少数量的节点从集合中构建树

例如,我有以下几套:

1。{A,B,C}
2.{B,C}
3.{D,B,A}
4.{C,A}
每个集合都由从根到叶的路径表示。它们是集合,因此节点在路径中的显示顺序并不重要

我需要一个使用尽可能少的节点的树,它将所有给定的集合表示为路径。一种可能的解决方案(不确定是否最小)是:

0
/   \
C A
/ \     \
A、B、B
/ \   \     \
4B2D
|         |
1         3

其中根节点0是某个空元素。

您是否考虑过任何解决方案?即使是蛮力方法也可以帮助确定最佳算法。最小化节点数闻起来应该是NP完全的,但我会考虑一下。我的第一次尝试是蛮力所有可能性。而不是考虑优化(如果太慢的话),注意一个简单的贪婪算法可以提供相对较好的结果。不完全确定它是否真的是最优的:第一次迭代选择大多数集合中存在的元素->C。然后选择剩余集合中存在的元素->例如A。等。第二次迭代,左边的分支(在C下):重复该过程。然而,在这里,我假设分支无法进一步重新连接。例如,右侧的第一个A无法连接到左侧的B是否要求树是二进制的?