背景:
最近在学习数论,好久没有写博客了,今天学习了一种新东西......
构造:
注意:这是一个迭代的过程,且只剩两个点时结束。
每一次找到一个度为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,其无根树的方案数: