1 / 65

天津大学

图论. 天津大学. 简介. 起源 基本定义:点,边,权,树 常见问题:图的遍历(连通性问题,割点割边,强联通分量,拓扑排序, 2-SAT ,欧拉回路);最小生成树(次小生成树,最小度限制生成树);最短路径(差分约束);二分图匹配;网络流等等。. 图的遍历. 方法: 广度优先搜索( BFS ) - 队列 深度优先搜索( DFS ) - 堆栈. 图的遍历. 连通性问题: BFS/DFS Floyd 方法. 图的遍历. 拓扑排序(为其他算法做准备); 割点割边的求法; 两遍 DFS 求强联通分量( 2-SAT 问题)。. 最小生成树. 什么是最小生成树?

emmy
Download Presentation

天津大学

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 图论 天津大学

  2. 简介 • 起源 • 基本定义:点,边,权,树 • 常见问题:图的遍历(连通性问题,割点割边,强联通分量,拓扑排序,2-SAT,欧拉回路);最小生成树(次小生成树,最小度限制生成树);最短路径(差分约束);二分图匹配;网络流等等。

  3. 图的遍历 • 方法: • 广度优先搜索(BFS)-队列 • 深度优先搜索(DFS)-堆栈

  4. 图的遍历 • 连通性问题: • BFS/DFS • Floyd方法

  5. 图的遍历 • 拓扑排序(为其他算法做准备); • 割点割边的求法; • 两遍DFS求强联通分量(2-SAT问题)。

  6. 最小生成树 • 什么是最小生成树? • 求最小生成树的算法: • Kruskal算法 • Prim算法 • 算法流程?

  7. 最小生成树 • 复杂度: • Kruskal算法:O(ElgV) • Prim算法: • 一般方法:O(V2) • 使用堆:O(E + VlgV)

  8. 最小生成树 • 算法的选择: • 从图的稀疏程度考虑 • 从问题对边的限制考虑

  9. 最小生成树 • 例一:Toj 2172 Qiushi Bookstore • 求实书店中有m本书,有n种方式可以把两本书凑成“一套”。每本书原价一元,如果我已经有了“一套”书的其中一本,那么我买另一本时就可以获得一定的折扣。给出所有能够凑成“一套”的两本书和这套书可以获得的折扣,求买下所有的书最少需要多少钱。注意每本书只能打一次折。

  10. 最小生成树 • 分析: • 可以把书看成图的节点,折扣看成边。 • 图可能不联通。 • 图的每个连通分量中至少有一个节点是要花一块钱买的。

  11. 最小生成树 • 怎样把问题转化成最小生成树? • 怎样证明正确性。

  12. 最小生成树 • M, N (M ≤ 5000, N ≤ 50000) • 输入数据中给出了每条边的描述。 • 选择哪种算法?

  13. 最小生成树 • 例二:北极的某区域共有n座村庄( 1 < n < 500 ),每座村庄的坐标用一对整数(x, y)表示,其中 0 < x, y < 10000。为了加强联系,决定在村庄之间建立通讯网络。通讯工具可以是无线电收发机,也可以是卫星设备。所有的村庄都可以拥有一部无线电收发机, 且所有的无线电收发机型号相同。但卫星设备数量有限,只能给一部分村庄配备卫星设备。不同型号的无线电收发机有一个不同的参数d,两座村庄之间的距离如果不超过d就可以用该型号的无线电收发机直接通讯,d值越大的型号价格越贵。拥有卫星设备的两座村庄无论相距多远都可以直接通讯。请问如何分配k台卫星设备,才能使所拥有的无线电收发机的d值最小,并保证每两座村庄之间都可以直接或间接地通讯。

  14. 最小生成树: • 最小生成树的第k大边即为所求。 • 证明?类似Kruscal算法 • K个卫星设备可以将k个联通分量连在一起。 • 取最小生成树的第k大边是可行的,因为去掉最小生成树中最大的k-1条边后,图中有k个连通分量。 • 如果d比最小生成树中第k长的边小的话,最小生成树至少被分割成为k+1部分,原图也至少被分割成为k+1部分。

  15. 最小生成树 • 例三:机器人 • 预想中的机器人将经过的路线应在由平行的墙构成的走廊中,而且走廊只能有90度拐角。走廊从X 轴正方向开始。障碍物是柱子,由点表示,且都在走廊的两墙间。为了使机器人能够通过那条路,盘子不能碰到柱子或墙——只有盘子的边缘能“靠”到他们。机器人和他的盘子只能在X 轴或Y 轴方向平移。假定机器人的尺寸小于盘子尺寸且机器人一直完全处于盘子下方。

  16. 最小生成树

  17. 最小生成树 • 在什么情况下机器人会碰到障碍物。(考虑正方形重心和障碍物点之间的坐标) • 什么情况下机器人不能通过。

  18. 最小生成树 • 把机器人看作点,把障碍物看作正方形。

  19. 最小生成树 • 要让一个点通不过,唯一的办法就是用障碍物把走廊堵住。这里的“堵住”就是说障碍物将在走廊的两堵墙之间形成一条通路。

  20. 最小生成树 • 两个障碍物点相连的条件 • 障碍物和墙相连的条件

  21. 最小生成树 • 把障碍物和墙壁看作图中的点,两点之间边的权值可以这样求得:定义两个点p1(x1,y1)和p2(x2,y2)的距离为max{|x1-x2|,|y1-y2|},障碍物的距离就是障碍点的距离;障碍物与墙壁的距离就是障碍点与墙壁上所有点的距离的最小值;两堵墙之间的距离就是走廊的最小宽度。

  22. 最小生成树 • 把墙壁看作起点和终点,那么从起点到终点的一条路径可以看作一道障碍。 • 机器人能够通过一道障碍的条件是什么?

  23. 最小生成树 • 路径上最长边的长度必须大于机器人的宽度。 • 机器人能通过所有的障碍,那么所有路径的最长边必须大于机器人的宽度。

  24. 最小生成树 • 求最小生成树,最小生成树中起点和终点路径上的最长边即为所求。 • 证明?仍然类似于Kruscal算法。

  25. 次小生成树 设G=(V, E)是一个连通无向图,在其上定义了权值函数w:E→R,并假设|E| ≥ |V|,且所有边的权值是不同的。 • 假设T为G的最小生成树集合,并设T’为T的最小生成树,那么次小生成树是集合T’-T 中权值最小的生成树。

  26. 次小生成树 • 设T是G的一棵最小生成树,那么存在边(u, v) ∈ T,和不属于最小生成树的边(x, y),使得T – (u, v) + (x, y)是次小生成树。 • 证明?反证法

  27. 次小生成树 • 求次小生成树的算法: • 求最小生成树; • 以每个节点为根做一次DFS,记录其他顶点到根节点路径上的最大边,最终将得到任意两点间路径上的最大边max(x, y)。 • 枚举非树边(x, y)找到使w(x, y) – max(x, y)最小的那个边,把它加入到树中,并把最大的边去掉。

  28. 最小度限制生成树 • 对于一个加权的无向图,存在一些满足下面性质的生成树:某个特殊的结点的度等于一个指定的数值。最小度限制生成树就是满足此性质且权值和最小的一棵生成树。

  29. 最小度限制生成树 • 比如前面通信的那道题,可以通过引入虚拟节点转化为最小度限制生成树问题。

  30. 最小度限制生成树 • 数学定义:设G=(V,E,ω)是连通的无向图,v0 ∈V是特别指定的一个顶点,k为给定的一个正整数。如果T是G的一个生成树且dT(v0)=k,则称T为G的k度限制生成树。G中权值和最小的k度限制生成树称为G的最小k度生成树。

  31. 最小度限制生成树 • 将v0及与之相关联的边从途中去掉,得到图G’,假设G’有m个联通分支,那么当m > k时,问题无解; • 求每个连通分支的最小生成树; • 在与v0相关联的边中选出m条边,分别与每个联通分量相连,并使这m条边权值之和最小。从而得到了v0的m度限制生成树; • 把v0当作生成树的根,求每个节点到根的路径上的最大边(不包括与v0相临的边)及其权值记作max(v); • 检查所有与v0相连且不在生成树中的边,然后去掉原生成树中从v0到u的权值最大的那条边,添加v0u,令v0u-max(u)最小就得到G的最小m+1度限制生成树; • 重复以上两步,知道求出k度限制生成树。

  32. 最短路径 • 常用算法: • Dijkstra算法 (单源最短路径) • Floyd算法(任意两点间) • Bellman-Ford算法(单源最短路径) • SPFA算法(单源最短路径)

  33. 最短路径 • 算法流程? • 复杂度: • Dijkstra: O(V2)或O(E+VlgV) • Bellman-Ford: O(EV) • Floyd: O(V3) • SPFA: 期望复杂度O(E)

  34. 最短路径 • 算法选择: • 编程复杂度:Bellman-Ford<Floyd<Dijkstra • 时间复杂度:Dijkstra<Bellman-Ford • 使用范围:有负权边需要使用Bellman-Ford • 如果是稀疏图,即使是求任意两点间最短路径,也最好选用堆优化的Dijkstra。

  35. 最短路径 • 例一:给定含有n个顶点的带权无向图,一共可以进行m次操作,每次操作将一条边的权值除以2。问每次应该对哪条边进行操作,使得1到n的最短路径权和最小。(1≤n≤50,1≤m≤10)

  36. 最短路径 • 把图分为m层,如果原图中有一条边uv,权值为w(uv),那么在第i层和存在两条权值为w(uv)的有向边uivi和viui,在第i层和第j层(j > i)之间存在两条有向边uivi+1和ui+1vi,权值为w(uv)/2j-i。

  37. 最短路径

  38. 最短路径 • 求从第1层的1号到第m+1行的n号节点的最短路径。

  39. 最短路径 • 差分约束模型: • 由若干个Xi – Xj ≤ bk形式的简单线性不等式,求满足这一系列不等式的一组解。

  40. 最短路径 • 关于差分约束的一个引理: • 设x=(X1, X2, …, Xn)是一个差分约束系统Ax≤b的一个解,d为任意常数,则x+d= =(X1+d, X2+d, …, Xn+d)也是该系统的一个解。

  41. 最短路径 • 约束图: • 给定一个差分约束系统,相应的约束图是一个带权有向图G=(V, E),其中V={v0, V1, …, Vn},而且E = {(vi, vj): xj-xi≤bk是一个约束} ∪{(v0, v1), (v0, v2), …, (v0, vn)} 。引入附加节点v0是为了保证其他每个节点均从v0可达。因此,顶点集合V由对应于每个未知量xi的定点vi和附加顶点v0组成。边的集合E有对应于每个差分约束条件的边与对应于每个未知量xi的边(v0, vi)所构成。如果xj-xi≤bk是一个约束条件,则边(vi, vj)的权w(vi, vj)=bk。从v0出发的边权值均为0。

  42. 最短路径 • 从约束图求差分约束问题的解: • 给定一差分约束系统,设G=(V, E)为其对应的约束图。如果G不包含负权回路,那么x=(mincost[v0][v1], mincost[v0][v2], …, mincost[v0][vn])是此系统的一个解。如果G包含负权贿赂,那么此系统不存在可行解。

  43. 最短路径 • 例题:猜数游戏 • A和B在玩猜数游戏,A告诉B他写好了n个非负数,然后告诉B一些这样的信息:第i个数减去第j个数大于等于某个正整数k。问使得所有这n个整数之和最小的一组解是什么。

  44. 最短路径 • xi– xj ≥ bk • (-xi) – (-xj) ≤ bk • 构图

  45. 二分图 • 什么是二分图? • 二分图匹配的定义。 • 二分图的经典应用: • 棋盘上的非攻击车 • 棋盘覆盖问题 • 职位分配

  46. 二分图 • 求二分图最大匹配的匈牙利算法 • 最大匹配数=最小点覆盖数 • 最大匹配+最小路径覆盖数=节点总数

  47. 二分图 • 匈牙利算法求最大匹配: • 假定现在已经有一组匹配M(两组顶点分别为X和Y) • 如果所有的定点都在M中,则已经匹配完毕,结束; • 寻找一个尚未匹配的定点x(属于X); • 找一个顶点y(属于Y),y不在M中,并且寻找一条从x到y的路径V; • 对于路径V作如下修改:若某边不在M中,则把改变添加到M中,若某边已经在M中,则把这条边去掉。

  48. 二分图 • 例一:任务安排 • 有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务i都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式ai,如果它在机器B上运行,则机器B需要设置为模式bi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重新启动一次。请合理为每个任务安排一台机器并合理安排顺序,使机器重启次数尽量少。

  49. 二分图 • 把两台机器的工作模式看成顶点,如果一个工作在第一台机器上用模式i完成,在第二台机器上用模式j完成,那么就用一条边把这两个顶点连接起来,这样对于所的边,他们都有一个顶点是机器1的工作模式,另一顶点是机器2的工作模式,于是构成的图是个二分图。题目要求用最少的模式完成所有的工作,就相当于在图中用最少的点覆盖所有的边(因为点代表模式,边代表工作)。最小覆盖数=最大匹配数。

  50. 二分图 • 某国有n个城镇,m条单向铁路。每条铁路都连接着两个不同的城镇,且该铁路系统中不存在环。现需要确定一些列车运行线,使其满足: • 每条铁路最多属于一条列车运行线; • 每个城镇最多被一条列车运行线通过(通过包括作为起点或终点); • 每个城镇至少被一条列车运行线通过; • 列车运行线的数量应尽量小。

More Related