我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:一品彩票 > 反馈边集合 >

图基础知识整理和代码实现

归档日期:05-11       文本归类:反馈边集合      文章编辑:爱尚语录

  )。例如在交通图中,有些道路是双行地,另一些是单行地,对应地可分别描述为无向边和有向边。

  对于任何边e=(i, j),称顶点i和j彼此邻接(adjacent),互为邻居;而它们都与边e关联(incident)。在无向图中,与顶点i关联地边数,称为i地度数(degree),记作deg(i)。以图1(a)为例,顶点{A, B, C, D}地度数分别为{2, 3, 2, 1}。

  联接于同一顶点之间的边,称作自环(self-loop)。不含任何自环的图称作简单图(simple graph)。

  所谓通路或者路径(path),就是由m+1个顶点与m条边交替而成的一个序列。图2(a)中的{C, A, B, A, D},即是从顶点C到顶点D的一条通路,其长度为4。可见,尽管通路上的边必须互异,但顶点却可能重复。沿途顶点互异的通路,称作简单通路,如图2(b)所示,{C, A, D, B}即是从顶点C到B的一条简单通路,其长度为3。

  特别地,对于长度m=1的通路,若起止顶点相同,则称为环路(cycle),其长度等于沿途边的总数。图3(a)中,{C, A, B, D, B, C}即是一条环路,其长度为6。反之,不含任何环路的有向图,称作有向无环图(DAG)。若沿途除开始和结束顶点外所有顶点互异,则称作简单环路(simple cycle),图3(b)中的{C, A, B, C}即是一条简单环路,其长度为3。

  特别地,经过图中各边一次且恰好一次的环路,称为欧拉环路(Eulerian tour)——当然,其长度也恰好等于图中边地总数e。图4(a)中的{C, A, B, A, D, C, D, B, C}即是一条欧拉环路,其长度为8。对偶地,经过图中各顶点一次且恰好一次的环路,称为哈密顿环路(Hamiltonlian tour)。图4(b)中,{C, A, D, B, C}即是一条长度为4的哈密顿环路。

  邻接矩阵是图接口的最基本的实现方式,使用方阵A[n][n]表示由n个顶点构成的图,其中每个单元,各自负责描述一对顶点之间可能存在的邻接关系,故此得名。

  对于无权图,存在(不存在)从顶点i到j的边,当且仅当A[i][j]=1(0)。图5(a)和(b)即为无向图和有向图的邻接矩阵实例。这一表示方法,不难推广至带权网络。此时如(c)所示,矩阵各单元可从布尔型改为整型或浮点型,记录所对应表的权重。对于不存在的边,通常统一取值为0或无穷大。

  以图6(a)所示的无向图为例,只需将如图(b)所示的邻接矩阵,逐行地转化为如图(c)所示地一组列表,即可分别记录各顶点的关联边(或等价地,邻接顶点)。这些列表,也因此称为邻接表(adjacency list)。

  邻接矩阵可以快速判断两个顶点之间是否存在边,可以快速添加边或者删除边。而邻接表在查询某个顶点的边时,需要遍历一整个链表。且对于无向图,如果需要删除一条边,就需要在两个链表上查找并删除。

  邻接表只存储实际存在的边,非常节省空间。而邻接矩阵通过一个 n∗n 的矩阵存储边的关系,如果顶点之间的边比较少,会比较浪费空间。

  于是,自图中顶点s的BFS搜索,将首先访问顶点s;再依次访问s所有未访问到的邻居;再按后者被访问的先后次序,逐个访问它们的邻居;...;如此不断。在所有已访问到的顶点中,仍有邻居未被访问者,构成所谓的波峰集(frontier)。于是BFS可以等效地理解为:

  反复从波峰集中国找到最早被访问到的顶点v,若其邻居均已被访问到,则将其逐出波峰集;否则,随意选出一个尚未访问到的邻居,并将其加入到波峰集中。

  图7给出了一个含8个顶点和11条边的有向图,起始于顶点s的BFS搜索过程。请留意观察辅助队列(下方)的演变,顶点状态的变化,边的分类与结果,以及BFS树的生长过程。

  其中,顶点共有三种状态,分别为UNDISCOVERED、DISCOVERED、VISITED,边共有5种状态,分别为UNKNOWN(未知边、TREE(树边)、CROSS(横跨边)、FORWARD(前向跨边)、 BACKWARD(后向跨边)。所有的TREE边构成了BFS树或者BFS森林(当存在多个连通分量时)

  于是,以顶点s为基点的DFS搜索,将首先访问顶点s;再从s所有未访问到的邻居种任意选其一,并以之为基点,递归执行DFS搜索。故各顶点被访问到的次序,类似于树的先序遍历;而各顶点被访问完毕的次序,则类似于树的后序遍历。

  图8针对含7个顶点和10条边的某有向图,给出了DFS搜索的详细过程。请留意观察顶点时间标签的设置,顶点状态的演变,边的分类和结果,以及DFS树(森林)的生长过程。

  最终结果如图(t)所示,为包含两颗DFS树的DFS森林。可以看出,选不同的起始点,生成的DFS树(森林)可能不同。如本例种,若从D开始搜索,则DFS森林可能如图(u)所示。

  图9以时间为横坐标,绘出了图(u)种DFS树内各顶点的活跃期。可以看出,活跃期相互包含的顶点,再DFS树种都是祖先-后代的关系(比如B之于C,或者D之于 F),反之亦然。

  图的基本操作主要分为边和顶点两类,主要包括查找、增添、删除、判断是否存在、获取顶点(边)的数量。另外,还包括图基本算法,这里只规定了图的广度和深度优先遍历算法,其它算法可以自己另外添加。

  采用邻接矩阵的方式表示并实现图的操作接口,其中邻接矩阵采用二层向量的形式进行实现,优点是可扩展性强,可任意插入和删除顶点和边。

  其中FunctionTv 类型是一个接口,其中定义了两个方法,分别为发现顶点时的操作和访问完毕后对顶点的操作,我们使用该库时,自己实现这两个方法。FunctionTv的定义如下:

  图的定义与术语 1、图按照有无方向分为无向图和有向图。无向图由顶点和边构成,有向图由顶点和弧构成。弧有弧尾和弧头之分。 2、如果任意两个顶点之间都存在边叫完全图,有向的叫有向完全图。若无重复的边或顶点到自身的边则叫简单图。 3、图中顶点之间有邻接点、依附的概念。无向图顶点的...

  来自:NoMasp柯于旺 - CSDN博客 链接:图的定义 背景知识 看到这篇博客相信一开始映入读者眼帘的就是下面这幅图了,这就是传说中的七桥问题(哥尼斯堡桥问题)。在...

  一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称。 数据元素:数据(集合)中的...

  1)这本书为什么值得看: Python语言描述,如果学的Python用这本书学数据结构更合适 2016年出版,内容较新 作者裘宗燕,北大教授,质量有保证2)这本书为什么不值得看: 这本书从第七章开始分别是‘图’,‘字典与集合’,‘排序’,这三章在数据结构中属于较难部分,但到...

  大数据文摘作品 编译:张礼俊、王一丁、xixi、修竹、Apricock、惊蛰、Chloe、龙牧雪 长文预警!本文作者Vardan Grigoryan是一名后端程序员,但他认为图论(应用数学的一个分支)的思维应该成为程序员必备。 本文从七桥问题引入,将会讲到图论在Airbnb...

  直接省去那个看起来比较平和的年代, 后来则是接连的人吃人 不论电影电视剧的结局比起小说来,小说更有张力 白嘉轩怎么会去举报自己儿子白孝文,他只是个农村乡绅,思想觉悟应不到那个层面 陈忠实先生之前说了一句话大概是要把性撕开来写,里面的体现大概是在...白嘉轩的七房媳妇儿上和田...

  不久前,国新办就2016年就业情况举行发布会,会上人力资源社会保障部部长表示,2016年就业形势严峻,高校毕业生高达765万,加上初高中和中职毕业生与海外留学归来学子,青年的就业群体加在一起大约有1500万左右。 就业形势严峻的2016 数据来自国家统计局 从我国今年的GD...

  你有没有爱一个人超过十年? 关于爱情,没结婚的那种。 前几天听朋友讲她某个同学从初中开始爱一个人一直到28岁,15年,从没有在一起过,就只是默默地陪伴在身边,像朋友也像亲人,偶尔的偶尔会像恋爱,但仅仅只是偶尔。 那一刻我心里粗现了一个闪着光的天使形象,才突然发现,我好像还没...

  一、意大利歌剧的发展 在19世纪上半叶,以罗西尼、贝利尼、多尼采蒂 三位为代表的作曲家形成了一种歌剧风格——谣唱歌剧。 (一)罗西尼 19世纪上半叶最具有影响力的意大利歌剧作曲家。 2、代表作品 喜歌剧《塞维利亚的理发师》、《灰姑娘》、《试金石》等。 ...

本文链接:http://explodingspec.com/fankuibianjihe/182.html