图论及其算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3. 最优环游:即具有最小权的环游.
注:(1) 若G是欧拉图,则欧拉环游即最优.
(2) 若G不是欧拉图,则重复边权和最小的即最优. 4. 定理:设P是赋权连通图G中一条包含G的所有边 至少一次的闭途径,则P最优当且仅当它满足以下两 个条件: (1) P中没有二重以上的边.
(2) 对G中的任意圈C,其重复边集E的长度之和不 超过圈长的一半,即w(E)≤1/2w(C).
2. 实例:希望利用公路开车从上海到北京,希望路 程最短.
注:(1)点—城市,边—公路, 权—距离,连通赋权图.
(2)所有权均非负.
二. Dijkstra 算法(1959) 1. 算法思想:
首先给始点一个标号l(u0 ) 0, 对其他点v,则标号为l(v) , 在算法进行过程中,不断修改这些标号,使得每个点都最终 可以得到一个标号,这个标号就是始点u0到该点的最短路长.
6. Ford-Fulkerson算法
(1) 标号过程
1). 源x标号(, ) 2). 选择一个已标号的顶点vi , 对其所有未标号的邻点作
如下处理:
若弧(vi , vj ) A, 且fij Cij , 令 j min{i ,Cij fij},并给vj标号(+vi , j ) 若弧(vj , vi ) A, 且f ji 0, 令 j min{i , f ji},并给vj标号(vi , j ),
进行为止.
8.算法思想:从任何一个可行流(如零流)出发,寻 找增广路,调节修正流量.
注:算法最终停止时,S为已标号点,T为未标号 点,C(S, T)即为最大流.
缺陷:符号顺序任意,导致增广路任意.
改进:最短增广路算法.
7. 实例
v1 (5,2) v4
(-v5,2)
(+v1,2)
v1 (5,2) v4
❖ 这样得到的网络不仅比原来节省材料,而且稳定性 也更好。
A
P
B
C
斯坦纳(Steiner)最小树是可以在给定的点之外再增加 若干个点(称为斯坦纳点),然后将所有这些点连起来。
如果不允许增加任何额外的点作为网络的顶点,这种最 短网络称为最小生成树。
在前面的例子中Steiner最小树的长为 3.
最小生成树的长为2.
5. Edmonds-Johnson算法
步骤1:取V0={v|d(v)为奇数},(G中一定有偶数个奇点). 步骤2:对V0中任意u,v,求d(u,v), (用Dijkstra算法). 步骤3:构造完全图K|v0|, 其中边{u,v}的权为d(u,v). 步骤4:求K|v0|中的权最小的完美匹配M. 步骤5:在G中求以M中每条边的两端点为端点的最短路. 步骤6:将步骤5中所求的每条最短路上的每条边都添上 一条等权的“倍边”,得到新图G‘. 步骤7:在新图G’中用Fleury算法求欧拉环游,则即为 G的最优环游.
直观思路即:从始点开始,每次找到始点最近的边,将其 顶点设为S,不断地将始点与S之间的最短路所涉及的边之 端点加入到S,直至到达终点.
2. 算法描述(从u0到un-1): 步骤1:置l(u0 ) 0, 对其他点v,l(v) , S0 u0,且i 0.
步骤2:对每个v Si ,l(v) min{l(v),l(ui ) w(uiv)};计算
1968年贝尔实验室波雷克(Pollak)和研究员吉尔伯特 (Gilbert)提出如下猜想:平面上任意n点集,斯坦纳最 小树长与最小生成树之长的比值的最小值是 3 2.
Steiner猜想起源于在美国贝尔电话公司发生的一 个富有戏剧性的事件。
1967年前,贝尔公司按照连结各分部的最小生成树 的长度来收费。1967年一家航空公司戳了贝尔公司 一个大洞。当时这家企业申请要求贝尔公司增加一 些服务点,而这些服务点恰恰位于构造该公司各分 部的斯坦纳最小树需增加的斯坦纳顶点上。这使得 贝尔公司不仅要拉新线,增加服务网点,而且还要 减少收费。这一意外事件迫使贝尔公司自此以后便 采用了斯坦纳最小树原则 。
(2)不允许高速路在所研究的城市以外的某点 处连接.
最短网络问题: 如何用最短的线路将三部电话连起来?
A
B
C
此问题可抽象为设△ABC为等边三角形,,连接三 顶点的路线(称为网络)。这种网络有许多个, 其中最短路线者显然是二边之和(如AB∪AC).
❖ 但若增加一个周转站(新点P),连接4点的新网 络的最短路线为PA+PB+PC。最短新路径之长N 比原来只连三点的最短路径O要短。
三. 中国邮递员问题(1962,管梅谷)
1. 问题:邮递员每天从邮局选好邮件,送到他所管辖 的邮区的客户手中,再返回邮局,他每天必须走过每 条街道至少一次,问如何选择邮递路线,使得他走过 的投递总行程最短?
2. 模型:非负赋权图G: 顶点----交叉口或终端,边----街道,权-----街道长 度,此即求图的通过每条边至少一次的闭途径,称为G 的环游.
思想方法:每次迭代中都让其构成一个闭的旅行路线, 它由多个阶段形成,每次都比上一次多一个顶点。 求解时,在已建立旅程之外的顶点中,寻找最邻近 于旅程中某个顶点的顶点,将其插入该旅程中,并 使增加的距离尽可能小,当全部顶点收入这个旅程 后,就找到了最短哈密尔顿回路的近似解.
实例:
A
(1) 初始点为A,组成闭旅程AA, 2 1 3 4
AECDBA(30),ACEDBA(25),ACDEBA(22),ACDBE
A(27),选择最小的ACDEBA(22)即为所求.
网络流问题
随着中国经济快速的增长,城市化是未来中国的发 展方向。我们要把物流业作为战略重点列入要大力 发展的新兴服务产业。如何制定一个运输计划使得 生产地到销售地的产品输送量最大?这就是一个网 络最大流问题。
一笔画问题)
❖ 在哥尼斯堡有七座桥将普雷格尔 河中两个岛及岛与河岸连接起来( 如图)。
Euler在1736年访问Konigsberg时,他发现当地的市民正从事一 项非常有趣的消遣活动。这项有趣的消遣活动是在星期六作一次 走过所有七座桥的散步,每座桥只能经过一次而且起点与终点必 须是同一地点。
Euler证明了不可能存在这样的路线。
2. 算法描述:
步骤1:置集合T为空集,任选一点v放入树T中.
步骤2:将连接T中的点与V-V(T)中的点的所有边中权最 小的边加入到T中,若权最小的边有多条,任选其一, 若不可能把任一条边加入到T中,则停止,输出G非 连通.
步骤3:若T有n-1条边,则停止,T即为所找的最小支 撑树,否则,重复步骤2.
4. 实例:求下列赋权完全图的最优Hamilton回路.
A
解:ACEBDA: 权和 25 BACEDB: 权和 25 CABEDC: 权和 22 DACEBD: 权和 25 EACDBE: 权和 27
21 B
9 10
34 5E 7 6
C8D 所选初始点不同,得到的近似解也不同.
5. 修改方法:最邻近插入法
f ji},调整增广路P中
的流量如下:
fij
'
fij fij
fij
(vi , v j ) P (vi , v j ) P (vi , v j ) P
得到新的可行流f ',其总流量为v( f ) ,
2). 去掉所有标号,回到步骤1,重复以上过程,直到无法
min{l
vSi
(v)},
并把达到这个最小值的一个顶点记为ui
1.置
Si1 Si U{ui1}.
步骤3:若i n-1,则停止,若i n -1,则i : i 1,转步骤2.
3. 实例:
a
3d
3
5
x 8b2 1 y
4 e8
c1
1) S0={x},其他l(v)=∞,l(x)=0 2) l(a)=3,l(b)=8,l(c)=4,S1={x,a} 3) l(b)=8,l(c)=4,l(d)=6, S2={x,a,c} 4) l(b)=8,l(e)=5,l(d)=6,S3={x,a,c,e} 5) l(d)=6,l(b)=7,l(y)=13, S4={a,c,e,d} 6) l(b)=7,l(y)=11,S5={a,c,e,d,b} 7) l(y)=11,S6={a,c,e,d,b,y}
图论及其算法
张莉 Tongji University lizhang@tongji.edu.cn
§1 最小支撑树问题
一.基本概念 1. 树:无回路的无向连通图.
2. 叶:树中度数为1的顶点.
3. 森林:连通分支大于1,且每个连通分支均为 树的非连通图.
二.最小生成树
1. 例1:在偏远地区,可以通过公路连接分散的村 落,但没有任何电话服务。我们希望铺设电话 线路,使得每一对村落都可以通过电话线连接 (不必是直接的)。沿着现存的公路铺设电话线 最便宜,问沿着哪些公路铺设电话线,可以确 保每一对村落被连接,且电话线的总长度达到 最小(电话线总长度可能与安装总成本成正比)?
三. Kruskal算法 1. 问题描述:如村落间铺设电话线的问题. 2. 算法思想(贪婪算法):总是选择权最小的边.
3. 算法描述:
步骤1:按照权的递增顺序排列图G的边,置集合T为空集.
步骤2:检查排列序表中第一条未检查的边,此边被放入 T中当且仅当它不与T中的边形成回路。若这条边被 加入T中,进入步骤3,否则重复步骤2.
步骤3:若T有n-1条边,则停止,T即为所找的最小支 撑树,否则,进入步骤2.
5. 实例:
b 53 d 8 54 e 12 10
70 22 a 63 c
排序: ab, cd,de,ec,bd,be,ac,ae
解:ab—cd—de--bd
四. Prim算法
1. 算法思想(贪婪算法):
从顶点出发,对任意点,总是选择与其关联的 权最小的边放入T中.
5. 实例:
b 53 d
8 54 e 12 10
70 22
a 63
c
1). 选点a,T={a},选出ab, 2). T={ab},选出bd, 3). T={ab,bd},选出dc, 4). T={ab,bd,dc},选出de
解:ab—bd—dc--de
一. 简介
§2 最短路径问题
1. 问题:寻找网络中两个顶点之间的最短路径问题.
3). 重复2)过程直到汇y被标号,或不再有顶点可以标号为止. 若y得到标号,说明存在一条x y增广路P,进入步骤2调整过程; 若y未得到标号,标号过程无法进行,说明f 即为最大流.
(2) 调整过程
1).
令
ຫໍສະໝຸດ Baidu
min{ min (vi ,v j )P
(Cij
f
ij
),
(
min
vi ,v j )P
(5,5) (3,3) (4,2)
(5,5) (3,3) (4,2)
x (4,2) v2 (3,0) v5 (3,3) y
三. 旅行商问题
1. 问题:设有n个城镇,已知每两个城镇之间的距离, 一个售货员自一个城镇出发巡回售货,问他该如何 选择路线,能使每个城镇经过一次且仅一次,最后 再回到出发地而且行程最短。
2. 模型:此即在赋权完全图中,寻找最小权的哈密尔 顿圈.
注:这个问题是NPC的.
3. 近似算法(最邻近算法)
下一阶段,最邻近A的顶点为C,B
建立闭旅程ACA,再寻找最邻近A 9
与C的顶点B,组成闭旅程 ACBA.
10
5E 7
6
(2) 从D,E中找一个最邻近ACBA的顶点D, 将其插入,分别得到ACDBA(权和20)C, 8 D
ACBDA(23),ADCBA(23),选择
ACDBA.
(3) 最后将E插入ACDBA,有4个位置
解:寻找最小生成树.
例2:假设在一个没有良好高速公路的偏远地区涌现 了几个城市,理想的是建筑足够多的高速公路, 使得城市之间或者直接通过高速公路往来,或 者可以通过去其他城市来实现彼此的互相往来. 现在我们希望成本最小化.
注: (1)成本最小化即:可以实现城市间的互通,同时, 每条高速路都不浪费(即去掉后就不能互通了).
步骤1:任选一点v0作为起点,找一条与v0关联的权最小的 边e1, e1的另一端点记为v1,即得初始路.
步骤2:若已选定路v0v1L vi,在V (G) {v0, v1,L , vi}中取一个 与vi最近(即权最小)的顶点,设为vi1, 得到已选出v0v1L vivi1.
步骤3:若i 1<n 1,则令i : i 1,转步骤2,否则,记 C v0v1L vn1v0 , 结束.