荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Version (Who makes history and why), 信区: Program
标 题: [转寄] 树中的最长距离的证明(from zju) readchild (转寄)[转载]
发信站: 荔园晨风BBS站 (Sun Apr 20 23:12:01 2003), 站内信件
【 以下文字转载自 Version 的信箱 】
【 原文由 pcAngel@bbs.pku.edu.cn 所发表 】
发信人: birdf (永远支持德意志), 信区: ACM_ICPC
标 题: [转寄] 树中的最长距离的证明(from zju)
发信站: 北大未名站 (2003年03月16日23:52:12 星期天), 转信
来 源: from bbs.zju.edu.cn (sg.zju.edu.cn [210.32.133.3])
日 期: Sun Mar 16 23:51:39 2003
发信人: standlove (standlove), 信区: Algorithm
标 题: Re: 树中的最长距离的证明。(上贴做废)
发信站: 浙江大学海纳百川站 (Fri Feb 28 22:31:36 2003)
呵呵, 以此贴为准, 狗狗来提提意见, 不要看到一半就跑了:)
[转贴]
发信人: starfish(金盆洗手,退隐江湖), 信区: Algorithm. 本篇人气: 27
标 题: Re: How calculate the diameter of a Tree?
发信站: 南京大学小百合站 (Wed Feb 26 14:13:04 2003)
下面是我的严格证明,不过写得比较麻烦:( 图论里面的很多问题容易理解,但是却不容
易用语言表达清楚。
为了阐述清楚证明,首先作如下严格定义:
1。我们用a~b表示树中任意两个结点a,b之间的唯一路径,a~b之间可以有0个或多个结点
;用x \in a~b表示结点x处于路径a,b上,即存在形如a~x~b的路径(这里x可以和a或b
重合);用符号a-b表示a,b直接相邻。
2。结点之间的距离——根据树的性质,任意两个结点u,v之间都有唯一的路径u~v相连,
u~v上边的数目称为u,v之间的距离,记作d(u,v);
3。树的直径——树中距离最大的两个结点之间的距离称为树的直径;
4。祖先——设r是树T的根,u是T的结点,如果 x \in r~u,则x称为u的祖先;
5。公共祖先 —— 如果结点x即是u的祖先,也是v的祖先,则x是u,v的公共祖先;
6。最近公共祖先 —— 如果x是u,v的公共祖先,且对于u,v的任何其他公共祖先y都有d(x
, u) <= d(y, u),则x称为u,v的最近公共祖先。用f(u,v)表示u和v的最近公共祖先。
引理1:树的直径一定等于某两个叶结点之间的距离。
证明:trivial.
引理2:对于树中任意三个不同的结点a,b,c,满足三角不等式d(a,b) <= d(a,c) + d(c,b
)。
证明:设a~c上的结点依次为p[1], p[2], ..., p[m],设a~b上的结点依次为q[1], q[2
], ..., q[n]。其中p[1] = q[1] = a, p[m]=c, q[n]=b。
case 1: 若存在一个k,k < m 且k < n,满足 p[k+1] <> q[k+1]且对于所有的i <= k,都
有p[i] = q[i]。
假设存在x, y > k+1且p[x] = q[y],则 p[k]-p[k+1]~p[x]和q[k]-q[k+1]~q[y] 构成
了一个圈(因为p[k]=q[k],p[k+1]<>q[k+1]且p[x]=q[y]),这和树的性质矛盾。所以一定
不存在这样的x,y。因此,子路径p[k+1]~c和q[k+1]~b没有任何公共点。下面用x表示点
p[k]和q[k],于是a,b,c构成了下述形式的路径
c
|
a~x~b
于是有
d(a,c) = d(a,x) + d(x,c),
d(a,b) = d(a,x) + d(x,b),
d(c,b) = d(c,x) + d(x,b),
所以
d(a,c) + d(c,b) = d(a,x) + d(x,c) + d(x, c) + d(x,b) = d(a,b) + 2*d(x,c) >= d(
a,b)
定理成立;
case 2: 假设这样的k不存在。
case 2.A 若m <= n,则对于所有的i=1..m,都有p[i]=q[i],于是点p[m]=c=q[m],即c
\in a~b。显然
d(a,b) = d(a,c) + d(c,b),
定理成立。
case 2.B 若m > n,则对于所有的i=1..n,都有p[i]=q[i],于是点q[n]=b=p[b],即b
\in a~c。显然
d(a,c) = d(a,b) + d(b,c)
即 d(a,b) = d(a,c) - d(b,c) <= d(a,c) + d(c,b)
定理也成立。
综上所述对于所有情况定理都成立。Q.E.D.
下面是引理2的另一种证明法:
设r是树的根,我们通过对树的结点数目n作归纳来证明d(a,b) <= d(a,r)+d(r,b)。
当n = 3的时候,穷举一下树的几种结构可知定理成立;
假设该定理对于所有的结点数目小于等于n的树都成立,则对于结点数目为n+1的树T,设其
根节点为r,r的子树为T[1], T[2],..,T[m]。
case 1: 若a,b属于r的两棵不同的子树,则r \in a~b,显然有d(a,b) = d(a,r) + d(r,
b);
case 2: 若a,b属于r的同一棵子树,不妨设同属于T[i]。设T[i]的根为x。则因为子树T[i
]的结点数目小于等于n,根据归纳假设有d(a,b)<=d(a,x)+d(x,b)。又因为显然有 d(a,r)
= d(a,x)+d(x,r) = d(a,x)+1,d(r,b)=d(r,x)+d(x,b)=1+d(x,b),所以有d(a,b)<=d(a,
r)+d(r,b)+2成立。
综上所述,对于所有的n,在结点数目为n的树中,总是有d(a,b)<=d(a,r)+d(r,b)成立。
根据树的性质,任何一个结点都可以看作根结点,所以对于任何的结点a,b,c,如果把c看
作根节点,则有d(a,b)<=d(a,c)+d(c,a)。 Q.E.D.
引理3:设对于树中任意两个节点a,b,设x = f(a,b),则 x \in a~b。
证明:假设存在一个节点y \in x~a,使得 y <> x 且 y \in x~b。设r是树的根节点。
则存在路径 r~x~y~a 和 r~x~y~b,于是y是a,b的公共祖先,且y到a的距离比x到a的
距离近,这和x = f(a,b)矛盾。
所以假设不成立。换句话说,x~a和x~b的唯一公共点是x。所以x \in a~b。 Q.E.D.
引理4: 设a,b,c是树中任意三个不同的结点,设x = f(f(a,b), c),即x是a,b,c三个点的
最近公共祖先,则x \in c~a 或 x \in c~b。
证明:设r为树的根。设f(a,b)=y,则x = f(y, c)。根据引理3知存在路径r~x~c和r~x
~y,且x~c和x~y只有一个公共点x。即构成形如
r
o
|
|
o x
/ \
/ \
c o o y
的路径。
首先,根据y=f(a,b),可知y~a和r~y不会有除了y以外的其他公共点,否则,假设它们的
公共点为t,则r~t和t~a构成了路径r~t~a,且y不在其上,这和y是a的祖先矛盾。因此
r~y和y~a没有除了y以外的其他公共点,即x~y与y~a不会有除了y以外的其他公共点。
同理可知x~y和y~b不会有除了y以外的其他公共点。
case 1: 若y~a和c~x没有公共点,则y~a和c~x~y除了y以外没有任何其他公共点,于
是连接c~x~y和y~a可以得到一条路径c~x~y~a,即 x \in c~a;
case 2: 若y~b和c~x没有公共点,同理可知x \in c~a;
case 3: 若y~a与c~x有公共点且y~b与c~x有公共点。不妨设y~a与c~x的公共点为z。
如果x <> y,则y~x~z~c和y~z~a可构成一个圈,和树的性质矛盾,所以这时必然有x
= y。如果z和x之间还有其他的结点,比如结点z',且z'不在y~a上,则x~z'~z~c和y
~z~a (注意到这时y=x)构成了一个圈。所以这种情况下,在路径c~x上x的前一个相邻
节点z一定在x~a上。同理,z一定在x~b上。即有如下形式:
r
o
|
|
o x (y)
/
z o~~~a
/ \
/ \
c o b
这时显然r~x-z~a构成一条路径,且r~x-z~b构成一条路径,所以z是a,b的公共祖先,
且d(z,a) = d(x,a)-1 < d(x,a)。这和x=y=f(a,b)矛盾。
故此情况不可能存在。
根据case 1,2,3知定理成立。 Q.E.D.
定理5: 设r是树T的根,u是距离r最远的结点,v是距离u最远的结点。则树的直径就是d(u
, v)。
证明:设a, b是除了u,v以外的另外两个叶节点。设x = f(f(a, b), u)。即x是a,b,u三个
节点的最近公共祖先。
根据引理4,一定有 x \in u~a 或 x \in u~b。不妨设x \in u~b 成立。
于是就有u~x~b这条路径,即
d(u,b) = d(u,x)+d(x,b) ......(1)
于是
d(r,u) >= d(r,a) // 因为u是距离r最远的点
==> d(r,x) + d(x,u) >= d(r,x) + d(x,a) // 因为根据公共祖先的定义,x \in r~u
且 x \in r~a
==> d(u,x) >= d(x,a) ........(2)
于是
d(u,v) >= d(u,b) // 因为v是距离u最远的点
= d(u,x)+ d(x,b) // 根据(1)式
>= d(x,a) + d(x,b) // 根据(2)式
>= d(a,b) // 根据引理2
所以对于除了u,v外任意的叶节点a,b,总有d(u, v)>= d(a,b)。
如果a,b中有一个是u,v之一,显然也有d(u, v)>=d(a,b)。
再根据引理1和树的半径的定义,可知d(u,v)就是T的直径。 Q.E.D.
--
争取下个月多做一道! +U+U
※ 来源:.浙江大学海纳百川站 http://bbs.zju.edu.cn [FROM: standlove]
--
※ 转寄:·浙江大学海纳百川站 bbs.zju.edu.cn·[FROM: birdf]
--
※ 转载:·北大未名站 bbs.pku.edu.cn·[FROM: 162.105.212.20]
--
※ 转寄:·北大未名站 bbs.pku.edu.cn·[FROM: 210.39.3.50]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.1.50]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店