树的Prufer 编码和最小生成树计数
目錄
1將樹轉(zhuǎn)化成Prufer數(shù)列的方法
2將Prufer數(shù)列轉(zhuǎn)化成樹的方法
將樹轉(zhuǎn)化成Prufer數(shù)列的方法
一種生成Prufer序列的方法是迭代刪點(diǎn),直到原圖僅剩兩個(gè)點(diǎn)。對(duì)于一棵頂點(diǎn)已經(jīng)經(jīng)過編號(hào)的樹T,頂點(diǎn)的編號(hào)為{1,2,...,n},在第i步時(shí),移去所有葉子節(jié)點(diǎn)(度為1的頂點(diǎn))中標(biāo)號(hào)最小的頂點(diǎn)和相連的邊,并把與它相鄰的點(diǎn)的編號(hào)加入Prufer序列中,重復(fù)以上步驟直到原圖僅剩2個(gè)頂點(diǎn)。 例子 Prufer數(shù)列 以上邊的樹為例子,首先在所有葉子節(jié)點(diǎn)中編號(hào)最小的點(diǎn)是2,和它相鄰的點(diǎn)的編號(hào)是3,將3加入序列并刪除編號(hào)為2的點(diǎn)。接下來刪除的點(diǎn)是4,5被加入序列,然后刪除5,1被加入序列,1被刪除,3被加入序列,此時(shí)原圖僅剩兩個(gè)點(diǎn)(即3和6),Prufer序列構(gòu)建完成,為{3,5,1,3} 2將Prufer數(shù)列轉(zhuǎn)化成樹的方法
設(shè){a1,a2,..an-2}為一棵有n個(gè)節(jié)點(diǎn)的樹的Prufer序列,另建一個(gè)集合G含有元素{1..n},找出集合中最小的未在Prufer序列中出現(xiàn)過的數(shù),將該點(diǎn)與Prufer序列中首項(xiàng)連一條邊,并將該點(diǎn)和Prufer序列首項(xiàng)刪除,重復(fù)操作n-2次,將集合中剩余的兩個(gè)點(diǎn)之間連邊即可。 例子 仍為上面的樹,Prufer序列為{3,5,1,3},開始時(shí)G={1,2,3,4,5,6},未出現(xiàn)的編號(hào)最小的點(diǎn)是2,將2和3連邊,并刪去Prufer序列首項(xiàng)和G中的2。接下來連的邊為{4,5},{1,5},{1,3},此時(shí)集合G中僅剩3和6,在3和6之間連邊,原樹恢復(fù)。 ?
?
?
1. 一棵標(biāo)號(hào)樹的Pufer編碼規(guī)則如下:找到標(biāo)號(hào)最小的葉子節(jié)點(diǎn),輸出與它相鄰的節(jié)點(diǎn)到prufer 序列, 將該葉子節(jié)點(diǎn)刪去,反復(fù)操作,直至剩余2個(gè)節(jié)點(diǎn)。
?
2. 由Pufer編碼生成樹:任何一個(gè)prufer 序列可以唯一對(duì)應(yīng)到一棵有標(biāo)號(hào)的樹,首先標(biāo)記所有節(jié)點(diǎn)為未刪除 依次掃描prufer 序列中的數(shù),比如當(dāng)前掃描到第k個(gè)數(shù)u,說明有一個(gè)葉子節(jié)點(diǎn)連到u,并在當(dāng)前操作中被刪除,找一個(gè)標(biāo)號(hào)最小的未被標(biāo)記為刪除的且在prufer 序列第k個(gè)位置后未出現(xiàn)過的節(jié)點(diǎn)v,在u,v間連邊并將v刪除,反復(fù)操作,最后剩兩個(gè)節(jié)點(diǎn)未被標(biāo)記為刪除,在它們之間連邊,這樣得到的一個(gè)圖含有n-1條邊則是一棵樹
3. 一棵樹N個(gè)結(jié)點(diǎn),其Profer序列有N-2個(gè)位置,因此可以在這N-2個(gè)位置里面任何的填充1~N之間的數(shù)形成一個(gè)prufer序列,且一個(gè)prufer序列唯一的對(duì)應(yīng)一顆生成樹,于是完全圖的最小生成樹的數(shù)目為N^(N-2)
?
推薦做題:pku2567,pku2568
?
轉(zhuǎn)載于:https://www.cnblogs.com/jeff-wgc/p/4472528.html
總結(jié)
以上是生活随笔為你收集整理的树的Prufer 编码和最小生成树计数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络之网络层:5、DHCP协议、I
- 下一篇: eclipse设置和启动优化(转)