我不想找到所有最小的生成树,但我想知道它们中有多少,这是我考虑的方法:
我找不到任何方法来查找所有生成树的权重,并且生成树的数量可能非常大,因此此方法可能不适合此问题。 由于最小生成树的数量是指数级的,所以计算它们不是一个好主意。
图中只有一个最小生成树,顶点权重不同。我认为找到最小生成树数量的最佳方法必须是使用此属性的东西。
编辑:
我找到了解决这个问题的方法,但我不确定,为什么会这样。任何人都可以解释一下。
解决方案:找到最小生成树的长度的问题是众所周知的;用于查找最小生成树的两个最简单的算法是Prim算法和Kruskal算法。在这两个中,Kruskal的算法按其权重的递增顺序处理边缘。然而,Kruskal算法需要考虑一个重要的关键点:当考虑按权重排序的边缘列表时,边缘可以贪婪地添加到生成树中(只要它们不连接两个已经以某种方式连接的顶点) )。
现在考虑使用Kruskal算法的部分形成的生成树。我们插入了一些长度小于N的边,现在必须选择长度为N的几条边。算法表明如果可能的话,我们必须在任何长度大于N的边之前插入这些边。但是,我们可以以我们想要的任何顺序插入这些边。另请注意,无论我们插入哪个边缘,它都不会改变图形的连通性。 (让我们考虑两个可能的图形,一个具有从顶点A到顶点B的边缘,一个没有边缘。第二个图形必须具有A和B作为相同连通分量的一部分;否则从A到B的边缘将被插入到一点。)
这两个事实共同意味着我们的答案将是使用Kruskal算法的方式数量的乘积来插入长度为K的边(对于每个可能的K值)。由于任何长度最多有三个边缘,因此不同的情况可以是暴力强制的,并且连接的组件可以在每个步骤之后确定,因为它们是正常的。
答案 0 :(得分:4)
看看Prim的算法,它说要重复添加权重最低的边缘。如果有多个可以添加最低权重的边缘会发生什么?可能选择一个树可能产生与选择另一个树不同的树。
如果你使用prim的算法,并为每个边缘作为起始边缘运行它,并且还运用你遇到的所有关系。然后你将拥有一个包含Prim算法能够找到的所有最小生成树的林。我不知道这是否等于包含所有可能的最小生成树的森林。
这仍然归结为找到所有最小生成树,但我看不到确定不同选择是否会产生相同树的简单方法。
答案 1 :(得分:3)
MST及其在图表中的计数得到了很好的研究。例如,请参阅:http://www14.informatik.tu-muenchen.de/konferenzen/Jass08/courses/1/pieper/Pieper_Paper.pdf。