树的直径 证明 算法导论
树的直径的定义:
树中任意两点距离的最大值
树的直径的求法:
从树的任意一点y,通过BFS到达终点x;则x必为直径的一个端点。再从x通过BFS到达终点z。z必为直径的另一个端点。则从x经过BFS到z的路径为树的其中一条直径。
证明:
思路:
首先利用反证法证明x为直径的一个端点,则同理z也是直径的一个端点,从而xz为树的直径。
证:
反证法。
假设x不为直径的一个端点。
则对于直径uv,u与v与x互异,且dis(u, v) > dis(x, z)
1. 若x在uv上:
记dis(x, y)为树中x到y的距离。由树的性质知,树的任意两点间有且仅有一条路径。则此路径既为x与y之间的最短路径,又是x与y之间的最长路径。因此,y到v之间必存在y先到达x再从x到达v的路径。
即:dis(y, x) < dis(y, x) + dis(x, v) 这与通过点y经过BFS得到x矛盾!
2.若x不在uv上:
分类讨论从y到x的路径是否与直径uv相交:
2.1 相交:
记与直径uv的交点为h,则有dis(u, v) = dis(u, h) + dis(h, v)
由于从y点BFS得到终点x,故而对于树上任意一点p,dis(y, x) >= dis(y, p)=>dis(y, x) >= dis(y, v) (*)代入dis(y, x) = dis(y, h) + dis(h, x), dis(y, v) = dis(y, h) + dis(h, v) 于(*)式,
则dis(h, x) >= dis(h, v)=>dis(u, h) + dis(h, x) >= dis(u, h) + dis(h, v)=>dis(u, x) >= dis(u, v)
而由于z为从点x通过BFS得到的最远点,故而= dis(x, z) >= dis(u, x) >= dis(u, v) => dis(x, z) >= dis(u, v)
与假设dis(u, v) > dis(x, z)矛盾!
2.2 不相交:
对于直径uv,u到v的路径上必存在点h,使得dis(u, h) = 1
由树的定义知,y到h必然存在一条路径,且dis(x, h) = dis(x, y) + dis(y, h) >= 2
则dis(x, v) = dis(x, h) + dis(h, v) >= 2 + dis(h, v) > 1 + dis(h, v) = dis(u, h) + dis(h, v) = dis(u, v) 这与uv是直径矛盾!
综上所述,假设不成立,故x为直径的一个端点。
同理,从x经过BFS必然得到直径的另一个端点。
故而xz为树的其中一条直径。证毕。
树的直径 证明 算法导论相关推荐
- van Emde Boas Trees(vEB树)(Introduction to Algorithms, 算法导论,CLRS)学习笔记
van Emde Boas Trees 1. Predecessor search/ordered sets predecessor: return the nearest left neighbor ...
- 《算法导论3rd第十三章》红黑树
前言 红黑树是一种较为"平衡的"二叉查找树.它能保证最坏的情况下其基本操作时间为O(lgn). 红黑树的性质 红黑树 是一种二叉查找树,但在每个结点上增加了一个存储位表示结点的颜色 ...
- 牛客题霸 [ 树的直径] C++题解/答案
牛客题霸 [ 树的直径] C++题解/答案 题目描述 给定一棵树,求出这棵树的直径,即两个节点距离的最大值. 题解: 不知道大家听没听过一个结论: 树的直径可以通过两边dfs找到 步骤: 1.从任意一 ...
- 求树的直径算法以及证明
以下为两次dfs(bfs)的做法以及正确性证明. 算法步骤 (1)任取树上一点S,以S为源点BFS得S到各个顶点的d值: (2)取d值最大者之一为P,再以P为源点BFS得P到各个顶点的d值: (3)再 ...
- 算法导论习题—主方法求渐进紧确界、递归树方法
算法导论习题-主方法求渐进紧确界.递归树方法 4.5-1 a. T(n)=2T(n/4)+1T ( n ) = 2 T ( n / 4 ) + 1T(n)=2T(n/4)+1 b. T(n)=2T(n ...
- 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)
给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...
- 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)
给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构 (算法导论第十章10.4-3) template<typename T> ...
- 给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出(算法导论第十章10.4-2)
给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出 (算法导论第十章10.4-2) #include <iostream> template<typena ...
- 【算法导论】 二叉搜索树、AVL树、和红黑树
二叉搜索树 二叉搜索树是一颗二叉树或一颗空树且满足以下性质: 1)根节点 x的key值大于任意左子树上节点的key值,小于右子树上任意节点的key值 : 2)其左右子树也分别是一颗二叉搜索树. 使用二 ...
最新文章
- 学院菌喊你来领取年终学习奖状啦~~!!!
- Linux命令关机/重启和Windows系统dos命令关机/重启
- IT职业就业-学长有话说
- python两人一碰_python运用pygame库实现双人弹球小游戏
- 215.数组中的第K个最大元素/347. 前 K 个高频元素
- iphone主屏幕动态壁纸_灵动优美的iphone高清动态锁屏壁纸
- 最好的虚拟服务器,最好虚拟主机推荐给大家
- 人工鱼群算法python_人工鱼群算法简介及应用
- 【链表】Remove Duplicates from Sorted List II(三指针)
- Linux计划任务入门详解
- 李政轩讲核方法kernel Method 视频笔记
- 管理定律——管理学中常见的定律集合
- 计算机组装需要注意什么东西,自己组装电脑需注意事项图文详情
- 数据库服务器,sql
- 计算机画图 教学反思,画图教学反思
- ZooKeeper管理工具一览
- clip studio paint插件开发之介绍
- 苹果录屏精灵_最新2018苹果APP排行榜,这四款没上榜真是太可惜了!
- EGE示例程序——花火闪烁的夜晚
- 如何在eclipse制作的APP中添加背景图