图论
- 格式:ppt
- 大小:492.00 KB
- 文档页数:67


未知驱动探索,专注成就专业
1
图论及其应用
简介
图论是计算机科学中的一个重要分支,研究的对象是由边与顶点组成的图形结构以及与其相关的问题和算法。图论的应用广泛,涵盖了计算机科学、网络科学、物理学、社会学、生物学等多个领域。本文将介绍图论的基本概念、常用算法以及一些实际的应用案例。
图的基本概念
图由顶点(Vertex)和边(Edge)组成,记作G=(V, E),其中V为顶点的集合,E为边的集合。图可以分为有向图和无向图两种类型。
有向图
有向图中的边具有方向性,即从一个顶点到另一个顶点的边有明确的起点和终点。有向图可以表示一种有序的关系,比如A到B有一条边,但B到A可能没有边。有向图的表示可以用邻接矩阵或邻接表来表示。 未知驱动探索,专注成就专业
2
无向图
无向图中的边没有方向性,任意两个顶点之间都有相互连接的边。无向图可以表示一种无序的关系,比如A与B有一条边,那么B与A之间也有一条边。无向图的表示通常使用邻接矩阵或邻接表。
常用图论算法
图论中有许多经典的算法,其中一些常用的算法包括:
深度优先搜索(DFS)
深度优先搜索是一种用于遍历或搜索图的算法。通过从起始顶点开始,沿着一条路径尽可能深入图中的顶点,直到无法再继续前进时,返回上一个顶点并尝试下一条路径的方式。DFS可以用于判断图是否连通,寻找路径以及检测环等。
广度优先搜索(BFS)
广度优先搜索也是一种用于遍历或搜索图的算法。不同于深度优先搜索,广度优先搜索逐层遍历顶点,先访问离起始顶点最近的顶点,然后依次访问与起始顶点距离为2的顶点,以此类推。BFS可以用于寻找最短路径、搜索最近的节点等。 未知驱动探索,专注成就专业
3
最短路径算法
最短路径算法用于计算图中两个顶点之间的最短路径。其中最著名的算法是迪杰斯特拉算法(Dijkstra’s Algorithm)和弗洛伊德算法(Floyd’s Algorithm)。迪杰斯特拉算法适用于没有负权边的图,而弗洛伊德算法可以处理带有负权边的图。
图论的基本概念和应用
图论,顾名思义,是研究图的一门数学分支。在计算机科学、网络科学、物理学等领域都有广泛的应用。本文将从图的基本概念入手,介绍图论的基础知识和常见应用。
一、图的基本概念
1.1 图的定义
图是由若干点和若干边构成的。点也被称为顶点,边也被称为弧或者线。一个点可以与任意个点相连,而边则是连接两个点的线性对象。一些有向边可以构成一棵树,而一些无向边则形成了一个回路。
1.2 图的表示
图可以用一张二维平面图像表示。这张图像由若干个点和连接这些点的线组成。这种表示方式被称为图的平面表示。图还可以用邻接矩阵、邻接表、关联矩阵等数据结构进行表示。
1.3 图的类型
根据图的性质,可以将图分为有向图、无向图、完全图、连通图、欧拉图、哈密顿图等。
有向图:边有方向,表示从一个点到另一个点的某种关系。
无向图:边没有方向,表示两个点之间的某种关系。
完全图:任意两个点之间都有一条边,不存在自环。\
连通图:任意两个点之间都有至少一条通路,没有孤立的点。
欧拉图:一条欧拉通路是一条从一点开始经过所有边恰好一次后回到该点的通路。
哈密顿图:经过所有点恰好一次的通路被称为哈密顿通路。
二、图的应用
2.1 最短路径问题
图论在计算机算法中最常见的应用之一就是最短路径问题。在一个有向图中,从一个点到另一个点可能有多条不同的路径,每条路径的长度也可能不同。最短路径问题就是找到两个点之间长度最短的路径。
最短路径问题可以通过深度优先搜索、广度优先搜索等方法来解决,但是时间复杂度通常较高。另外,使用Dijkstra算法、Floyd算法等优化算法可以大大缩短计算时间。
2.2 社交网络
社交网络是图论应用的一个重要领域。在社交网络中,人们之间的关系可以用图的形式表示。例如,在微博网络中,每个用户和他/她所关注的人就可以形成一个有向图。在这种图中,点表示用户,边表示一个人关注另一个人的关系。
通过对社交网络进行图论分析,可以研究用户之间的互动模式,了解到哪些用户之间联系较为紧密,哪些用户是网络中的“大咖”等。这些信息可以帮助企业或者政府制定营销策略,开展促进社会和谐的活动等。
Floyd算法
1核心思路
通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。
从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(1)构造出D(2);……;最后又用同样的公式由D(n-1)构造出矩阵D(n)。矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一个后继节点矩阵path来记录两点间的最短路径。
采用的是(松弛技术),对在i和j之间的所有其他点进行一次松弛。所以时间复杂度为O(n^3);
其状态转移方程如下: map[i,j]:=min{map[i,k]+map[k,j],map[i,j]}
map[i,j]表示i到j的最短距离,K是穷举i,j的断点,map[n,n]初值应该为0,或者按照题目意思来做。
当然,如果这条路没有通的话,还必须特殊处理,比如没有map[i,k]这条路
2算法过程
1,从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
2,对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。如果是更新它。
把图用邻接矩阵G表示出来,如果从Vi到Vj有路可达,则G[i,j]=d,d表示该路的长度;否则G[i,j]=无穷大。定义一个矩阵D用来记录所插入点的信息,D[i,j]表示从Vi到Vj需要经过的点,初始化D[i,j]=j。把各个顶点插入图中,比较插点后的距离与原来的距离,G[i,j] = min( G[i,j], G[i,k]+G[k,j] ),如果G[i,j]的值变小,则D[i,j]=k。在G中包含有两点之间最短道路的信息,而在D中则包含了最短通路径的信息。
比如,要寻找从V5到V1的路径。根据D,假如D(5,1)=3则说明从V5到V1经过V3,路径为{V5,V3,V1},如果D(5,3)=3,说明V5与V3直接相连,如果D(3,1)=1,说明V3与V1直接相连。
1 图论中的常用经典算法
第一节 最小生成树算法
一、生成树的概念
若图是连通的无向图或强连通的有向图,则从其中任一个顶点出发调用一次bfs或dfs后便可以系统地访问图中所有顶点;若图是有根的有向图,则从根出发通过调用一次dfs或bfs亦可系统地访问所有顶点。在这种情况下,图中所有顶点加上遍历过程中经过的边所构成的子图称为原图的生成树。
对于不连通的无向图和不是强连通的有向图,若有根或者从根外的任意顶点出发,调用一次bfs或dfs后不能系统地访问所有顶点,而只能得到以出发点为根的连通分支(或强连通分支)的生成树。要访问其它顶点则还需要从没有访问过的顶点中找一个顶点作为起始点,再次调用bfs或dfs,这样得到的是生成森林。
由此可以看出,一个图的生成树是不唯一的,不同的搜索方法可以得到不同的生成树,即使是同一种搜索方法,出发点不同亦可导致不同的生成树。如下图:
但不管如何,我们都可以证明:具有n个顶点的带权连通图,其对应的生成树有n-1条边。
二、求图的最小生成树算法
严格来说,如果图G=(V,E)是一个连通的无向图,则把它的全部顶点V和一部分边E’构成一个子图G’,即G’=(V, E’),且边集E’能将图中所有顶点连通又不形成回路,则称子图G’是图G的一棵生成树。
对于加权连通图,生成树的权即为生成树中所有边上的权值总和,权值最小的生成树称为图的最小生成树。
求图的最小生成树具有很高的实际应用价值,比如下面的这个例题。 2 例1、城市公交网
[问题描述]
有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点,即任一对城市都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使得工程的总造价最少。
[输入]
n(城市数,1<=n<=100)
e(边数)
以下e行,每行3个数i,j,wij,表示在城市i,j之间修建高速公路的造价。