*树的计数 Labeled unrooted tree counting

问题:

4个标记为1,2,3,4的节点构成*树(算法导论里的定义,连接着,无环,无向的图),一共有多少种构造方法?如果N个节点呢?

解决方法:

4个节点可以通过穷举的方式得到答案,一共有16中方式。

  第一类构造方式,取一个节点做中心,剩余三个节点与其相连,一共4种(每个节点做一次中心)。

  第二类构造方式,四个节点连成一条线,可以看成个排列,第一个有4种取法,第二个有3种,依次类推。但是因为例如1234与4321结构上是一样的,

所以总的排列数除以2才是总共的构造数,即 $\frac{4!}{2}$。(这个是基本的排列知识)

  *树的计数 Labeled unrooted tree counting

图片来源

  下面讲解其中的一种Prufer Code 解法。

  它的思想就是计数里或者其他场合经常出现的——一对一映射的方法。每一颗*树对应一个Prufer Code, 每一个Prufer Code对应一颗*树。

这样计算Prufer Code的个数就得到了*树的个数。

  先给出公式, *树的总个数为$T(N) = N^(N-2)$

  参考资料

1. Prüfer_sequence

原文地址

上一篇:android常见错误-E/AndroidRuntime(13678): java.lang.NoClassDefFoundError:


下一篇:GIT 分支管理:分支管理策略、Bug分支、Feature分支