prufer序列

背景:

最近在学习数论,好久没有写博客了,今天学习了一种新东西......



构造:

注意:这是一个迭代的过程,且只剩两个点时结束。

每一次找到一个度为1的点(显然是叶子结点),将其删除,将它连出的点加入prufer序列,最后将它连出去的边删除。

重复此过程即可。


如此图(百度百科用这张图):

(1)找到2,将3加入prufer序列,删除这两个点之间的边;

(2)找到4,将5加入prufer序列,删除这两个点之间的边;

(3)找到5,将1加入prufer序列,删除这两个点之间的边;

(4)找到1,将3加入prufer序列,删除这两个点之间的边;

(5)只剩下两个点(3,6),结束。

最后的结果就为{3,5,1,3}。



逆构造:

即将prufer序列转化为树。

假设有n个点,对于一个集合,每次从prufer序列序列中取出最前面的一个点,与S集合未在prufer序列中出现的数连边,将两个数再起分别所在的地方删除,重复n-2次(必然prufer序列为空了),最后将集合中剩余的两个点连边。


如:

有n=6,这一棵无根树的prufer序列为{3,5,1,3}。

则S={1,2,3,4,5,6}。

(1)在prufer序列中取出最前面的一个点3,在S中找到在prufer序列中出现的数2,2与3连边, 将其分别删除。此时,prufer序列为{5,1,3},S集合为{1,3,4,5,6};

(2)在prufer序列中取出最前面的一个点5,在S中找到在prufer序列中出现的数4,4与5连边, 将其分别删除。此时,prufer序列为{1,3},S集合为{1,3,5,6};

(3)在prufer序列中取出最前面的一个点1,在S中找到在prufer序列中出现的数5,1与5连边, 将其分别删除。此时,prufer序列为{3},S集合为{1,3,6};

(4)在prufer序列中取出最前面的一个点3,在S中找到在prufer序列中出现的数1,1与3连边, 将其分别删除。此时,prufer序列为,S集合为{3,6};

(5)最后将3与6连边即可。

就得到了此图:




性质:

[1]:一个n个节点的无根树唯一对应了一个n-2长度的prufer序列。

[2]:prufer序列中某一编号的出现的次数等于这个编号的节点在无根树的度数-1。

上面两个比较显然,难的出现了。

[3]:n个点的无根树的方案数:

                                                                   

[4]:推广到:已知n个点的度分别为d1,d2,d3,...,dn,其无根树的方案数:

                                                            

猜你喜欢

转载自blog.csdn.net/zsyz_ZZY/article/details/80363422