- 4
- 0
- 约2.31千字
- 约 26页
- 2018-11-29 发布于天津
- 举报
浅析树的划分问题演示教学.ppt
问题的提出
这是一道提交答案式的题目,其中 test6~test9 所给的图是一棵树,若不考虑具体的数据情况,我们可以将原问题抽象成如下问题:
给定一棵树以及树中每个顶点的一个非负权值,将树划分为k棵子树,定义:sum(i)表示第i棵子树中所有顶点权值的和,x=min{ sum(i)|1≤i≤ k },请求出x的最大值并输出一种划分方案。
我们把它称作树的最大-最小划分问题。
算法1:问题转化
考虑新问题:
对于一个确定的下界,最多可将树划分为多少棵子树,使得每棵子树的权值和都不小于此下界?
新问题
+ 二分法
原问题
解决新问题
新问题的解决只需要一个以贪心思想为基础的扫描算法。
3
9
3
5
3
12
6
4
下界:10
3
5
12
4
17
3
10
6
解决原问题
时间复杂度:O(N) 已是理论下界
通过二分法来找到最大的下界x,使得划分的最大子树数目不小于k,x即为原问题的解。
小结
解决问题的途径:问题转化
实现简单,运行效果好
运行时间依赖于节点的权值范围
若节点的权值范围很大或者权值是小数甚至无理数……
时间复杂度不依赖于节点权值范围的算法?
新思路: 割
一条边所连接的两个顶点分属不同的子树,则称在这条边上有一个“割”。
每个割对应一棵子树 + 根节点所在子树
划分k棵子树
将k-1个割分配到k-1个不同的边上
新思路: 移动
一次移动被定义为将一个割从一条边移到一条与它相邻的边上,并且保证新的边一定是在原来那条边的下一层。
新算法:
初始状态
+ 移动规则
关键点
初始状态
最简单的方法:
· 任选一个度为1的顶点为根
· 将所有割都放在与根相连的唯一的边上
可以由初始状态到达任何一个目标状态
关键: 移动规则的制定
移动规则
依据的还是一种贪心的思想:
1.计算出当前状态下子树权值和的最小值 Wmin
2.考虑所有可能的移动,找出能使移动后的割所对应的子树权值和Wnow最大的那种移动
3.如果Wnow ≥ Wmin,那么进行这步移动,并转到步骤1
4.算法结束,Wmin 即为所求的最大的最小值,当前划分即为一种最优划分
证明?
例子
7
9
1
3
9
12
8
当前划分
一种最优划分
“上方”
当前划分总是在某个最优划分的“上方”
“上方”的定义
划分A在划分A’的上方,也就是存在一种A的割和A’的割的一一对应,使得每个A的割都在它所对应的A’的割的上方。
更加实用的性质 ?
定义:部分子树
若一棵树T的子树T’包含了顶点v连同v的某一个儿子以及这个儿子的所有后继,则称T’是T在顶点v处的一棵部分子树。与v相连的唯一一条边被称为T’的初始边。
v
初始边
重要性质
划分A在划分A’上方
A
A’
#(A)
≤ #(A’)
证明算法
(1) 在初始状态时的划分A是在任何一个最优划分Q的上方的。
(2) 若存在一个最优划分Q使得当前的划分A是在Q的上方,且A和Q不相等,则算法一定不会终止。
(3) 设A在Q的上方且A不等于Q,在算法进行一步后A变为A’,我们一定还能找到一个最优划分Q’使得A’在Q’上方。
(4) 算法会在有限步内终止,算法终止时的划分一定是一个最优划分。
一些说明
字母A表示由算法进行而得到的划分。
字母Q表示一个最优划分,即使得最小子树最大的划分。
用Wmin(A)表示在划分A下的最小子树的权值和
对于任意划分A,Wmin(A) ≤ Wmin(Q)
证明算法(2)
(2) 若存在一个最优划分Q使得当前的划分A是在Q的上方,且A和Q不相等,则算法一定不会终止。
当前划分A
最优划分Q
c
s
c’
c’
≥ Wmin(Q)
≥ Wmin(Q)
≥ Wmin(A)
证明算法(3)
(3) 设A在Q的上方且A不等于Q,在算法进行一步后A变为A’,我们一定还能找到一个最优划分Q’使得A’在Q’上方。
c
c
s
s
e1
e2
v
≥Wmin(Q)
当前划分A
最优划分Q
情况1:对于在顶点v处的每一棵部分子树T’,都有#(A)=#(Q)。
证明算法(3)
情况2:存在在顶点v处的某棵子树T’,使得#(A)#(Q)。
c
c
e1
e2
v
s
s
≥Wmin(Q)
≥Wmin(Q)
≥Wmin(Q)
e3
当前划分A
最优划分Q
呼,终于证完了……
小结
新思想,新方向:割,移动
贯穿整个证明过程的思想:上方
当前划分
最优划分
上方
“序”的概念
算法的扩展
权函数的扩展
子树中所有节点的权值之和
子树中节点权值最大值?
子树半径?(树的
原创力文档

文档评论(0)