《图论的基本算法》PPT课件.ppt
《《图论的基本算法》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《图论的基本算法》PPT课件.ppt(49页珍藏版)》请在三一办公上搜索。
1、图论,朱全民,图,图的概念G=(V,E)图的基本概念有向图、顶点、入度、出度、弧、环无向图、边、路径、顶点的度、邻接简单图、完全图平面图、二分图,图的存储结构,邻接矩阵 graph=Record vex:array1.vtxptr of vertex;arc:arrayvtxptr,vtxptr of vertex;邻接表 表节点 type arcptr=arcnode;arcnode=record adjvex:vtxptr;nextarc:arcptr;info:和弧有关的其他信息 end;vex=Record vexdata:和顶点有关的其他信息 firstarc:arcptr;end;
2、adjlist=array vtxptr of vexnode;,拓扑排序,网线从机房连接到办公室在机房,所有网线从左到右编号为1,2,3,N 给出每两条线是否交叉的信息,请计算办公室内从左到右各条线的编号,FUNC toporder(var dig:adjlisttp):boolean;init(top2);m:=0;ve1.n:=0 while Not empty(top1)do j:=pop(top1);push(top2,j);m:=m+1;k:=firstadj(dig,j);while k0 do 入度(k):=入度(k)-1;if 入度(k)=0 then push(top1,k
3、);if vej+dut()vek then vek:=vej+dut();k:=nextadj(dig,j,k)if mn then return(false)else return(true);endF;,求拓扑序列,拓扑排序,核心问题:给一些序关系,排出全序!一个一个排先排最大然后第二大具体实现?每次取0出度点枚举所有点吗?0出度只可能是1出度变来的!O(n+m),欧拉道路和回路,经过每条边一次且仅一次先看回路必要条件:所有点度为偶数充分条件:还是“所有点度为偶数”证明!把欧拉回路构造出来“圈套圈”可能套不出来吗?想一想,欧拉道路和回路,有向的情形入度=出度如何套圈?道路有两个奇度点正好
4、是起点和终点哪个是起点,哪个是终点?有向+无向怎么办?网络流!不要求掌握,怎样找欧拉回路,幼儿园里有很多房屋房屋与房屋之间连以走廊走廊与房屋之间有一扇门幼儿园长想把门漆成绿色或者黄色,使得任意一条走廊两头门的颜色不同任意一间房屋上的门,绿色门的数量与黄色门的数量相差不超过1。如何实现?,分析,如果每个房屋的门为偶数,那么幼儿园本身就是个欧拉回路。那么,如果从房屋踏上走廊,门被漆成绿色;从走廊踏进房屋,门被漆成黄色。由于走廊只走一次,因此,每间房屋进出的次数一样,因此,任意一间房屋的门,绿色门和黄色门的数量一样。如果门的数量为奇数,那么要对幼儿园门进行改造,要使得门数量为奇数的房屋为偶数个,将这
5、样的房屋两两配对,并在新增加的门之间虚设一条走廊,这样幼儿园就成为了欧拉回路。然后按规律给门油漆,然后撤去所有虚设的走廊和门,由于被撤去的房屋的门最多只有一个,所以同样保证绿色门的数量和黄色的门的数量相差不超过1。,另一个例子,考古学家发现了一块布,布上做有针线活,叫做“十字绣”交替地在布的两面穿线布是一个nm的网格线只能在网格的顶点处才能从布的一面穿到另一面。每一段线都覆盖一个单位网格的两条对角线之一而在绣的过程中,一针中连续的两段线必须分处布的两面给出布两面的图案(实线代表有线,虚线代表背面有线)最少需要几针才能绣出来?一针是指针不离开布的一次绣花过程。例如图(b)的图案最少需要4针。,分
6、析,抽象成图网格交叉点:顶点正面的线:正边背面的线:负边有边相连:连通块每个连通块分别求对于某个顶点i|正边数-负边数|=K0时以该顶点为开始或结束的针数=K可以恰好为K针所有K值加起来,除以2(每一针有两个端点)注意差值为0时,为1针而不是0针,最小生成树问题,要求连接所有岛屿电缆总长度尽量小,Prim算法,任意时刻的中间结果都是一棵树从一个点开始每次都花最小的代价,用一条加进一个新点问题:这样做是对的吗?如何快速找到这个“最小代价”?,Prim算法的正确性,换一种说法如果存在一个MST,包含当前所有边则也存在一个 MST,它包含最小代价边(u,v)反证法!假设存在这样的MST当前结点集为S
7、,剩下的结点集为T由于在MST中S-T连通一定有跨越S-T的某边(u,v)它不是最小代价边(u,v)删除(u,v),加入(u,v),S和T分别连通,且S-T通过(u,v)连通得到了一个更小的MST!,快速找到最小代价,需要借助数据结构!我们的算法要求快速取/删除最小值(边权)允许插入边(加入新点时插入它的关接边)抽象数据类型:优先队列!经典实现:堆!,Prim算法框架,初始化,树仅含一个任意一点v0把v0的邻边插入堆for i:=1 to n-1 dobegin 从堆中取出最小值,设边为(u,v),v为新点(u,v)加入生成树中 v和它所有不在树中的邻居组成的边插入堆end;每次取最小值为O(
8、logm)总时间复杂度为O(nlogm),Kruskal算法,任意时刻的中间结果是一个森林从n个点的集合开始每次选不产生圈的前提下权最小的边加入问题:这样做是对的吗?如何快速的判断是否产生圈,Kruskal算法的正确性,把一个二元组(E,I)叫做一个子集系统,如果满足:1E是一个非空集合2I是E的一个子集族,它在包含运算下封闭,即I的每个元素a都是E的一个子集,并对于a的任何子集a,a一定也是I的元素。3给E中每个元素e赋予一个正权w(e)。考虑至少有一条边的带权无向连通图G它的边集为E它的所有生成森林的集合为I则(E,I)是一个子集系统,称为生成森林子集系统E非空,所以满足条件1生成森林是E
9、的一个边集,而且其生成子图仍是生成森林,满足2G是带权的,所以满足3。,子集优化问题,极大独立集把I中的元素都称为独立集对于I中的元素a,如果不存在I中的另一个元素a使得a是a的真子集,则称a是极大独立集。该极大独立集的基数为它包含的元素个数在刚才介绍的子集系统中,G的所有生成树就是所有的极大独立集。所有极大独立集具有相同的基数|V|-1。其中|V|为G的顶点数。子集优化问题在子集系统(E,I)中选取一个元素SI,使得w(S)最大(定义w(S)为S中所有元素的权和),子集优化问题的贪心算法,贪心算法先把E中元素按照权值从大到小排序为e1,e2,令集合S=空集然后每次尝试着把e1,e2,,添加到
10、S里面如果添加之后S仍是独立集,则添加成功如果S不是独立集,则由定义知以后无论怎样继续添加元素,得到的集合都不可能重新成为独立集,因此撤消此添加操作。Kruskal算法是生成森林子集系统的贪心算法!贪心算法在什么子集系统下是的对的呢?定理贪心算法正确,当且仅当这个系统的极大独立集具有相同的基数满足条件的子集系统称为“矩阵胚(matroid)”,快速判断是否产生圈,需要借助数据结构!我们的算法要求判断两个点是否在同一棵树中产生圈当且仅当此边连接同一树中的点!快速把两棵树合并加边意味着两棵树合为一棵抽象数据类型:并查集!经典实现:森林并查集的森林实现森林中的每棵树表示不同的集合树的形态并不重要,有
11、意义的只是“哪些元素在树中”,并查集的操作,查找用树根作为集合的标识不断的找父亲,最终将找到树根要找多少次父亲?和树的高度有关!怎样减少树的高度?找到树根后沿途把路径上的结点的父亲设为根专门名称:路径压缩两元素所在的树根相同,则二者属于同一集合合并其中一棵树成为另一棵树树根的子树谁成为谁的子树?注意树的高度!启发式合并时间复杂度:几乎都为常数!,并查集的实现,回忆刚才用到了什么信息?查找:“不断的找父亲”“沿途设置结点的父亲为树根”合并:“把一棵树的父亲设置为另一棵树的树根”只有“父亲”信息!父亲表示法!father:array1.maxn of integer;根结点root满足father
12、root:=root查找:while fatherp p do p:=fatherp;?合并:if height(p1)height(p2)then fatherp1:=p2,Kruskal算法框架,把所有边按照权值从小到大排序为e1,e2,初始化n个集合,Si=isize:=0;for i:=1 to m do if ei的两个端点u,v不在同一个集合 then begin 合并Su和Sv inc(size);if size=n 1 then break;end;最坏情况循环执行m次,判断约O(1)如果输入已经排序好,则总时间复杂度为O(m),否则为O(mlogm),最短路问题,问题描述:给
13、加权图GSSSP:求给定起点s到其他所有点的最短路APSP:求每两对点的最短路算法标号设定类:dijkstra标号修正类:bellman-ford动态规划类:floyd-warshall变形与应用举例,SSSP(Dijkstra算法),核心思想:按路径递增的次序产生最短路径的算法 1)找到图中最短的路径,设为(v,vj),将j设为已标号的点 2)找下一条次短的路径,假设终点为k,将k设为已标号的点,那么要么是(v,vk)要么是(v,vj,vk),若经过vj,将j设为已检查的点,放入集合.3)以次短路径出发找第三短的路径,类似第二步的方法.4)按上述方法一直到所有的顶点被检查过,则从v到其他顶点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图论的基本算法 基本 算法 PPT 课件
链接地址:https://www.31ppt.com/p-5484779.html