Net有道

紫冠道人的求道历程

导航

二、 树

 

2.1 树及其性质

 

照样先给出定义,没什么可说的,照抄就是了。

无圈连通图叫做树,用T表示;Td(v)=1的顶叫做叶;每个连通片皆为树的图叫做林。孤立顶叫做平凡树(好象跟平凡图是同一个东西)

T是图G的生成子图时,T称为G的生成树;从G中把T之边删除得到的图G-E(T)叫做G的余树或树余。

 

下面给出树的六个等价命题。

定理1 下面的六个命题等价:

(1)   G是树。

(2)   G中任二顶之间有且仅有一条轨。

(3)   G中无圈,且ε=υ-1

(4)   G连通,且ε=υ-1

(5)   G连通,任意的e<-E(G)G-e不连通。

(6)   G无圈,任意的e不属于E(G)G+e恰有一个圈。

 

推论1 非平凡树至少两个叶

证:T为非平凡树,则ε(T)= υ(T)-1,2ε=Σd(vi)=2(υ-1)T是连通图,于是d(vi)>=1,若全是不小于2次的顶,则Σd(vi)>=2υ与Σd(vi)=2(υ-1)矛盾,故至少有一个一次顶u,u外,其余υ-1个顶次数之和为2υ-3。若除u外每顶次数不小于2,则它们的次数和>=2(υ-1),与它们的次数和为2υ-3矛盾。故除u外还至少有一个一次顶。证毕。

推论2 G连通的充要条件是G有生成树。

证:充分性不足道。(定义就是这样的)

G连通,设TG的边数最少的连通生成子图,则对任意的e<-E(T)T-e不连通,由定理1(5)T是树,即G有生成树。证毕。

 

1 顶数大于4的图G或其补图中含有圈。

证:若G中与Gc中皆无圈。设G1,…,GωG的连通片,G1’,G2’…,GωGc的连通片,则G的边数为υ(G)-ω,Gc的边数为υ(G)-ω’(上述的推断正是要建立在图中无圈的基础上)GGc边数之和为

(1/2)υ(υ-1)=2υ-ω-ω’,  (等式前面是因为图G与其补图一起考虑的话,两顶之间两两相邻所以其边数为(1/2)υ(υ-1))

υ2-5υ+2(ω+ω’)=0 (ω, ω’>=1)

υ2-5υ+4 <=0

解得1<=υ<=4,与υ>4矛盾,故GGc中有圈。证毕。

 

书上还有一些例子,不一一列上来了。

这一节就这样结束,很简单。刚开始总是比较简单的。

 

 

2.2 生成树的个数

 

顶点标志的连通图,除非它本身就是树,一般地,有不止一个生成树;我们把标志不同而同构的生成树视为不同的生成树,如此一个小小的K,竟有一亿棵生成树。本节给出一个求生成树个数的方法和完全图生成树个数的Caylay公式。

G的一边e被收缩,是指从G中把e删除,再令其二端点重合成一个顶。所得之新图,记成G·e,若e不是环,则显然有

υ(G·e)=υ(G)-1,ε(G·e)=ε(G)-1,ω(G·e)=ω(G) (ω是连通片个数)

T是树,T·e仍是树。

我们用τ(G)表示标志图的生成树之个数。

 

定理2 e是标志连通图G的非环状边,则有公式

         τ(G)= τ(G-e)+ τ(G·e)

证:G的含e的生成树与G·e的生成树一一对应,即τ(G·e)G中含e的生成树之个数,另一方面,G的不含e 的生成树与G-e的生成树一一对应。所以有τ(G)= τ(G-e)+ τ(G·e),证毕。

 

下面是求完全图K生成树的个数的公式

定理2 (Caylay)  τ(Kn)=nn-2 

证:令Kn的顶集为N={1,23…,n},则由N中元素构成的长n-2的序列恰为nn-2(就是一般的排列组合而已,每个元素可以相同)。下面建立上述序列与Kn的生成树之间的一一对应关系。

任取定Kn的一个生成树T,设s1T中第一个一次顶,取t1为与s1相邻的顶之号码,把s1T上删除;设s2T-s1中第一个叶,取t2s2T-s1中相邻的顶之号码,依此类推,即由N中元素构成的长n-2序列。最后剩下K2

反之,任给定由N中元素构成的长n-2的一个序列t1,t2,…,tn-2,我们可以如下地画册出一个生成树:s1N中不在{t1,t2,…,tn-2}中第一个号码,把s1t1连一边;s2是不在{t2,t3,…,tn-2}中的N-{s1}的第一个号码,把s2t2连一边。继续这一过程,得n-2个边s1t1,s2t2,…,sn-2tn-2。再连接N-{s1,s2,…,sn-2}中的两个顶,则得一个生成树。至此建立了t1,t2,…,tn-2型的(ti<-N)序列与Kn生成树之间的一一对应,故τ(Kn)=nn-2 。证毕。

完全图K的生成树数目真可怕。

 

下节是求最小生成树的Kruskal算法。

 

 

 

 

 

 

 

 

2.3  Kruskal算法

 

又是一个大家耳熟能详的算法,具体的算法不准备描述了,证明一下定理

定理4   Kruskal算法选得的边的导出子图为最优树

证:Kruskal算法得出的子图T*是生成树自不待说。下证它的最优性。设T*不是最优树,T1G的任给定的一个生成树,f(T1){e1,e2,…,ev-1}中不在T1上的ei的足标i的最小值,令Tf(T)最大的一个最优树。因为T*不是最优树,又E(T*)={ e1,e2,…,ev-1},故e1,e2,…,ev-1中必有不在E(T)中的边,设f(T)=k,即e1,e2,…,ek-1TT*上,而ek不在T上,于是T+ek中有一个圈C。令ek是在T上而不在T*上的边,且ekC上。显然,T’=(T+ek)- ek也是生成树,又W(T’)=W(T)+w(ek)-w(ek’),由算法知,ek本是使G[{e1,e2,…,ev-1}]上无圈的权最小的边,又G[{e1,e2,…,ek-1,ek’}]T之子图,也无圈,则有w(ek’)>=w(ek)。于是W(T’)=<W(T),即T’也是最优树,但f(T’)>k=f(T),与f(T)之最大性矛盾。证毕。

 

除此以外有几个例题,但画图比较的麻烦,就不放上来了,而且这个算法也很普通。所以就这节就此结束。好快。

 

 

 

 

 

 

 

 

 

2.4 几类常用树

 

这一章到目前为止都还比较的简单,还看不出“树”这种特殊的图的优势所在。这节一下子才把树的魅力是展露无余。

 

G是有向图,e=uv是有向边,箭头从u画向vu叫做边e之尾,v叫做e的头。W=v0e1v1e2…ekvk,有向边ei的尾是vi-1,头是vi1=<i=<k,则W叫做有向道路,有向轨是指W中顶点两两相异。d-(v)表示v为头的边数,d+(v)表示v为尾的边数。

 

2.4.1 有序二元树

定义  T是一个树,把每边规定一个方向且使得任意的vi<-V(T),存在有向轨P(v0,vi),则称T是外向树,v0叫做根,把外向村之定向反过来,得到的有向树叫内向树。

定义  T为外向树。有任意的v<-V(T), d+(v)=<σ,则称Tσ元树。当e=uv时,u称为v之父,v称为u之子;同父之子称为兄弟。除树叶外,每顶皆σ子时,称为典型σ元树。外向树每顶的儿子们有序时,叫有序树,有序树之序列叫做有序林(外向树上的箭头可以省略)

(图论里的有一些定义都很好理解,也很有意思)

有序树当σ=2时,就叫有序二元树了,这个有序二元树可是很有用呀。给这种树编编码就强大了,因为编码与有序二元树是一一对应的,这样可以用机器编码来表示树(当然三元、四元的也是可以编码出来表达的,只是因为现在的机器是二进制的,所以这个二元树就特殊点了)

 

2.4.2  Catalan

一开始总要先介绍一些定义。先讲括号列:括号列是指左括号“(”和右括号“)”组成的有限序列。

定义  好括号列是指

(1)    空列是好的

(2)       AB是好括号列,则AB也是

(3)       A是好的,则(A)也是

(4)       (1)(2)(3)中的括号列外,再无其它好括号列(不是好括号列,称为坏括号列)

实际上就是括号能一一配对就是好的,数学就是严谨,就这个东西也定义得这么麻烦,下面的定理,就是讲的这个意思,也是喽里喽嗦讲一大堆。

 

定理5  一个括号列是好括号列的充要条件是它由偶数个括号组成,其中半数是左括号,且从左向右数读这个括号列时,读出的右括号个数不会超过读出的左括号个数。(这书上的定理少有这么没符号的,最起码都有个Gev等的)

证明没什么好证的,数学归纳法就搞定了。

直接讲定理6,把Catalan数引出来了。

 

定理6  2n个括号组成的好括号列个数是

          c(n)=1/(n+1) Cn2n

这个数c(n)叫做Catalan数。

证:设p1p2…p2nn个左括n个右括构成的坏括号列。由定理5知,有一个前缀,其中右括比左括多。设p1p2…pj的右括比左括多,且j最小,这时右括只比左括多1个,把从pj+1开始的每个括号“翻”过来,则得n-1个左括n+1个右括坏括号列,显然这一变换是可逆的,故n个左括与n个右括组成的坏括号列与n-1个左括n+1个右括组成的括号列一一对应。而n-1个左括n+1个右括组成的括号列共讲Cn+12n个,n个左括n个右括组成的括号列共Cn2n个,所以2n个括号的好括号列共有

Cn2n-Cn+12n=1/(n+1) Cn2n

证毕。

 

定理7  n个字符每个都要进入“先入后出”存储器S恰好一次,进入S是是有序的,则出S的不同字符列共计可能有c(n)个。

记入为“(”,出为“)”就行了,简单得很。

 

下面两道例题常看到,答案其实就是定理7了,也就是定理6的那个Catalan

例7                  一个汽车队在狭窄路面上行驶,不得超车。但可以进一个死胡同去加油,之后再插队行驶,共有n辆车,问可能有几种排列不同的车队开出城去?

例8                  饭后,姐姐洗碗,妹妹把姐姐洗过的碗一个一个放进碗橱摞成一摞。共有n个图样两两相异的碗,洗前成摞成摞,也许小妹贪玩,碗拿进橱子不及时,姐姐就把洗过的碗摞在旁边,问小妹摞起的碗可能有几种方式?

 

2.4.3  有序2元树的个数

上面的Catalan数下面又用到了。

定理8  n顶有序林和n顶有序二元树的个数皆为c(n)

证:把有序林中每个叶标以(),把其儿了们的标志分别是w1,w2,…wv的内顶标志以(w1w2…wv),最后从左到右根的标志分别为x1,x2,…xv,整个林的标志是x1x2…xv。这一标志映射显然是可逆的,且x1x2…xv2n个括号组成的好括号列,于是2n个括号组成的好括号列与n顶有序林之间一一对应。所以由定理6n顶有序林的个数是c(n);又n顶有序林与n顶有序二元树之间一一对应,故n顶有序二元树的个数也是c(n)。证毕。(一一对应这个东西真管用呀)

 

定理9  n顶典型有序二元树的个数为c((n-1)/2)

证:容易看出,典型有序二元树的叶数L(T)与内顶个数I(T)满足L(T)=I(T)+1(从最简单的1内顶2叶这种典型有序二树开始,每次扩一次叶时。内顶增1,但叶也只是增1。有1个原来的叶成了内顶,但新增了2叶,算来算去只增了1 叶,内顶永远比叶少1)。所以有(n-1)/2个内顶。而n顶典型有序二元树与(n-1)/2个顶的定位二元树一一对应,因为把n顶典型有序二元树之叶全部揪去,则得(n-1)/2个顶的有序二元树,显然,这种变换是可逆的。由定理8,得n顶有序二元树个数为c((n-1)/2)。证毕。

 

2.4.4  Huffman

有序二元树的威力显现出来了----Huffman这个名字也是很熟的呀。

定义  v0为根的v1,v2,…,vn为叶的有序二元树中,轨P(v0,vi)(i=1,2,…,n)的长li叫做叶vi的码长。若vi(i=1,2,…,n)代表的事物出现的概率为piΣpi=1,使得

     m(T)= Σpili=min

有序二元树T叫做带权p1,p2,…,pnHuffman树,也叫做最优二元树。

 

下设p1=<p2=<…=<pnv1,v2,…,vn为与之相应的叶。

定理10  (1)THuffman树,vi,vj是兄弟,则li=lj(2)v1v2是兄弟;(3)T+是带权p1+p2,p3,…,pnHuffman树,与p1+p2相应的叶子生出两个新叶分别有权p1,p2,则得到的树T即为带权p1,p2,…,pnHuffman树。

证:(1) 由树上轨P(v0,vi)P(v0,vj)的唯一性,以及v0vi,vj之父的轨的唯一性知,P(v0,vi)P(v0,vj)等长(都等于v0到它俩之父的轨长加1)

(2) Huffman树仅v1,v2两个叶,由m(T)=mint知兄弟v1v2的码长l1=l2=1。若T有三个以上的叶子,则因T为二元树,有码长不小于2的叶。又m(T)=p1l1+p2l2+…+pnln=min,不妨设l1=>li,i=2,3,…,n。这是因为,若pk=p1,而lk>l1(n=>k=>2),我们把v1vk足标对换,得一同构树,m(T)不变,而使新树上v1的码长大于vk的码长。若pk>p1,而lk>l1,把v1vk带权对换,得到的新树T’m(T’)=p1lk+p2l2+…+pkl1+…+pnln<m(T),与m(T)最小矛盾。故l1不妨认为是最长的码长,且l1>=l2>=…>=ln,若v1无兄弟,则l1还可缩短1,这与m(T)=min矛盾。故v1的兄弟是v2.

(3) T’是带权p1,p2,…pnHuffman树,只需证明m(T)=<m(T’)。由(2),带权p1p2的叶在T’中是兄弟,令T’+T’p1p2为权的叶删除,其父的权为p1+p2的树,则

    m(T’)=m(T’+)+p1+p2,

    m(T)=m(T+)+p1+p2

T+是带权p1+p2,p3,…,pnHuffman树,故m(T’+)>=m(T+),于是m(T)=<m(T’)。证毕。

 

根据定理10可以构造Huffman树,这种方法称为“兄弟寻父法”。

 

到这里第2章就算是结束了,实在有点意犹未尽呀。特别是Huffman树,书上除了给出一个定理10外并没有过多的介绍。

“几乎所有应用图论的领域都要在相当大的程序上依靠树来解决某些重要问题。树,尤其是生成树(本节以后章节有几处还要讨论生成树)可以说是图的骨骼,从来是被重视的一个问题”-----看来以后有得折腾了。

 

posted on 2004-10-21 13:50  lichdr  阅读(2097)  评论(5)    收藏  举报