基于Tarjan算法的极大点连通子图研究

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:fogwl
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:由于传统朴素算法求解无向图的双连通分量时间花费过高,为了在线性时间内求出双连通分量并得到极大连通子图。文章对Tarjan算法的思想以及具体实现做出了详细的分析。同时结合具体实例,验证了算法中割点的判定条件以及回溯数组初始化的有效性和适用性。最后,给出了Tarjan算法在求解极大连通子图过程中,结点和栈空间状态转化图。
  关键词:极大连通子图;双连通分量;Tarjan算法
  Abstract: Because the traditional naive algorithm takes too much time to solve the biconnected component of undirected graph, in order to find the biconnected component in linear time and obtain the maximally connected subgraph. The idea and implementation of Tarjan algorithm are analyzed in detail in this paper. At the same time, the validity and applicability of the decision condition of the cut point and the initialization of the backtracking array in the algorithm are verified by a concrete example. Finally, the state transition diagrams of node and stack space in the process of solving the maximally connected subgraphs of Tarjan algorithm are given.
  Key words: Maximally Connected Subgraphs; Biconnected Component; Tarjan Algorithm
  1 問题概述与分析
  对于连通的无向图(undirected graph),若删除某个顶点或者某条边,无向图的连通性变得未知。如果只删除无向图中某条边,无向图的连通性和连通分量(connected component)发生改变,那么删除的这条边为无向图的桥。若一个无向图中不存在桥,这个无向图为边双连通图(edge-biconnected graph)。对于点双连通图,条件则更强一些。当顶点被删除时,与顶点相邻的边也要被删除。其中一个顶点被删除后,无向图的连通分量发生变化,该顶点为关节点(articulation vertex)。
  在传统朴素算法中,寻找无向图中所有的桥和关节点需要多次DFS[1](depth-first search)。一次DFS可以求出无向图的连通分量,而每次DFS的渐近时间复杂度为[T(n)=O(N E)],其中[N]为无向图的顶点数,[E]为无向图的边数。每次删除无向图中一条边再进行DFS,即可求出删除一条边后的连通分量。同理可以得出,对顶点进行相同的若干次删除操作,可求出无向图中所有的关节点。而两者的渐近时间复杂度分别为[O(E×(N E))], [O(N×(N E))],均为平方阶。朴素算法求解无向图的桥和关节点时间花费太高。应寻求一种新的算法,在线性时间内求出最优解。算法最理想的状态是对无向图DFS一次,可求出所有桥和关节点。此时的时间花费最低,时间复杂度[1]为[O(N E)]。
  Robert Endre Tarjan(美国计算机科学家、1986年图灵奖得主)[2]提出了关于求解有向图的强连通分量的Tarjan算法。考虑到无向图是有向图的特殊情形,当有向图中相连的两个点之间存在往返的路径时,有向图可转化为无向图。由此可以得出无向图的线性Tarjan算法。本篇文章在有向图的基础上,引入了无向图的回溯数组。通过图形动态描述了DFS过程中low数组的更新情况,并对回溯过程中每个结点的low值更新进行了详细的叙述。对于割点的判断,从根节点和非根结点两个维度出发,系统论证了割点的判断依据。最后具体分析了在入栈和出栈操作中,每个双连通分量对应的极大连通子图的求解过程。
  2 Tarjan算法的思想和基本理论
  Tarjan算法采用DFS遍历整个无向图,通过对DFS搜索树的分析和研究。引入了时间戳即深度优先数和用于记录搜索树中每个结点深度优先数的回溯数组。回溯数组记录的深度优先数是该结点所能连接的最小的深度优先数。回溯数组是通过递归初始化,然后回溯更新的方式确定下来的。在递归访问结点的过程中,将遍历的结点依次入栈。回溯结点时,将栈中的元素循环出栈,直到遇到割点则跳出循环。而每次出栈的元素,刚好对应关节点的一个极大点连通子图。为了使算法容易理解,本篇文章将父子结点对应的边入栈。
  2.1 无向图的实例
  为了后续算法的具体实现和问题讨论的方便,这里不考虑独立点和非连通图。选定了0~6共7个顶点8条边作为无向图的研究对象,顶点之间的连接关系如下图所示。
  图1展示了7个顶点8条边的无向图连接平面图[3]。对图1中的无向图,从顶点0开始进行一次深度优先遍历,得到相应的DFS遍历树。无向图的搜索树主要有两种边,顶点之间的实线为无向图的树边(tree edge),虚线为无向图的回边(back edge)。每次访问新的结点即父亲结点到儿子节点的连接都会产生一条树边。回边一方面为了表示已被访问过的子孙结点与祖先结点的连接关系,另一方面将平面图各个结点之间的连通关系体现出来。
  2.2 无向图的深度优先数   当无向图的各个结点的连接关系以及各个元素在数据结构中存储位置被确定时,这个无向图的DFS搜索树也就随之确定。每个结点在搜索树的位置和遍历的先后顺序也是固定不变的。为了记录各个结点遍历的顺序,引入全局变量dfs_clock时间戳,将其初始化为0。在DFS过程中,每当访问一个新的结点dfs_clock就自增。同时用数组dfs[n]存储每个结点被访问的先后顺序即深度优先数,深度优先数的数值越小结点被访问的时间越早。
  图中的蓝色箭头为DFS递归访问的儿子结点的方向,淡黄色箭头为儿子结点到父亲结点的回溯方向。箭头上的数字编号是递归和回溯执行的顺序。从结点0开始进行DFS,每个结点的深度优先数存储在一维数组dfs[n]中并与数组的下标建立起映射关系。
  2.3 无向图结点的回溯数组
  通过观察图1和图2,我们可以知道:因为深度优先搜索树引入了回边,图2的连通性与图1是等价的,并且DFS遍历树还表示出了结点的子孙关系。考虑到图2传递的信息更多,因此应在图2的基础上对问题进行深入的研究。尝试删除深度优先遍历树的不同结点,再观察剩余结点的连通性和连通分量,可以发现关节点的判定依据和连通分量数量关系。
  A1、A2、A3为三个连通区域,连通区域中可能包含若干个连通的结点。三个图中F为父亲结点,S1和S2为儿子结点。删除三个图中F结点及其与F结点相邻的边。A和C对比可以发现:C中F结点不是关节点,A和B中的F结点为关节点且A和B中均存在桥。由于C中两个子节点均存在连接祖先结点的回边,C中的F结点被删除后,整个图的连通性并未发生改变,相应的连通分量数目也未发生变化。相反地,由于A中两个子节点没有回边,F结点被删除后,整个图的连通性与连通分量发生了变化。
  A、B、C三个图中F结点均有两个子结点且回边的数量依次增加,F结点被删除之后连通分量的数目依次减少。可以猜想:某个结点是否为关节点与儿子结点是否有连接祖先结点的回边有关,并且儿子结点回边的数量与删除父亲结点后的连通分量的数目有着一定的数量关系。不难验证:如果F结点只有一个子结点且唯一的子结点不存在回边。当F结点被删除后,连通分量数目必然增加,F显然是关节点。
  通过对非根结点的分析,可以得出这样的结论:若非根结点F所有的子结点存在连接F的父亲结点的回边,那么F一定不是关节点;相反地,若F的所有的子结点中有一个儿子结点不存在回边,F结点就是割点。
  当F为DFS搜索树的根结点时,若F有多个儿子结点,那么F结点被删除后连通分量的数目就会增加,此时F为关节点。显然当F只有一个儿子结点时,F被删除后连通分量的数目不变,依然为1。
  经过以上所有的分析和討论,我们可以把F结点推广到所有结点。可以很清楚地发现,搜索树的结点可以分成根结点和非根结点。对于根结点,直接判断儿子结点的数量是否为1。非根结点的处理略有复杂,需要记录每个儿子结点所能连接的最小的深度优先数,然后与父亲结点的dfs[F]进行比较。这里需要用到一个回溯数组low[],用于记录每个结点去除父亲结点所能连接的最小的深度优先数。如low[S],表示S结点以及S的后代中所能连接的最小的深度优先数。用Si表示F结点的儿子结点,将low[Si](i=0,1,2…)与dfs[F]进行比较,若存在一个子节点Si,使得low[Si]
其他文献
摘要:為了增加跑步健身运动中计步数值的精确性以及跑步的趣味性,设计了基于红外光电传感器、OLED显示屏、MP3模块以及STM8L嵌入式微处理器的健身跑步计步器系统,并实现了硬件电路和软件程序的功能。该系统通过红外光电传感器的发射端通电连续发射红外光,接收端接收红外红外线并转换成电信号,由单片机采集电信号并计数,结果在显示屏上显示。此外,加入MP3模块实现播放音乐和语音提示功能,增加了系统的娱乐性质
基于微信公众号的智慧校园访客系统从物理架构、逻辑架构、功能模块三个角度进行分析研究,将微信公众号、智慧门禁系统、访客系统、短信平台有效结合在一起,实现跨平台无纸化办公。系统开发借助微信OpenID、H5、SQL数据库技术搭建B/S架构,达到访客线上提前申请,线下入校自主验证出行的目的,改善了传统的线下访客人工记录信息流程烦琐的现状,提高了访客出入校园的工作效率,值得广泛推广使用。
明确应用型人才培养的目标,分析找出高校传统教学模式存在的问题,该文以软件开发课程Web开发技术为例,对课程新教学模式进行研究和实践,提出了在课程中采用多种教学模式相结合的方式进行教学,建立团队合作教学,依托慕课平台,实现线上教学,线下以项目引导教学,鼓励学生个性化学习,校企合作,加强实践教学,采用基于过程的考核方式,通过新的教学模式,激发了学生的学习兴趣,提高了学生的实践能力。
摘要:现阶段计算机应用软件在开发环节,往往需要软件设计人员综合考虑,结合软件工程相关知识点,从而提升当前软件开发工作质量。该文主要介绍了当前常用的软件开发语言,并且对软件开发环节编程语言对于当前计算机应用的影响分析,详细提出了三点选择合适的编程语言方法,以供相关工作人员借鉴分析。  关键词:计算机软件;编程语言;开发平台;综合能力  中图分类号:TP311 文献标识码:A  文章编号:1009
摘要:生物多样性是群落生态学中的重要概念,α多样性指数普遍应用于生态学科学研究中。α多样性指数的计算与相关图像绘制,在数据处理与分析阶段是非常必要的。为获取α多样性指数相关数据信息,从规范的“物种-样地”二维矩阵初始数据格式出发,运用Python编程语言开发程序并通过测试,实现较高整合程度与较快计算速度,协助后续研究过程。  关键词:植物群落;α多样性;多样性指数;Python语言;程序设计  A
摘要:大数据时代,各类影视资源纷纷涌现,“信息过载”问题在影视行业愈发凸显,有效的电影推荐算法是解决这个问题的关键。本文首先总结了电影推荐的主流推荐算法,主要有协同过滤、基于内容的推荐和混合推荐三类算法,然后比较分析了几种推荐算法的优缺点。最后,针对推荐算法的发展方向,又对基于上下文的推荐算法进行了简单的介绍。  关键词:电影推荐;协同过滤;基于内容的推荐;混合推荐  Abstract:In th
众所周知,目前国内处于一个快速、重要的现代化社会建设进程当中,各种先进的技术开始进入到广大人民群众的视野当中,包含云计算、物联网和大数据技术等等,尽管目前这些技术已经在实际的社会发展过程中进行运用,并且取得了一定的效果,但是这些技术的价值和作用并未完全开发出来,在后续的发展过程中仍旧需要技术工作人员对其进行深入的研究和探索,使其各方面的作用和价值都能够体现出来,并且在实际的工作中进行运用,提升总体
摘要:随着信息技术和互联网技术的发展,编程思维和编程能力的培养引起社会的关注,Scratch的出现降低了编程教育的门槛,使得少儿编程迅速兴起。为了进一步推广普及少儿编程教育,该文基于Python设计开发一个线上教育平台,系统采用Django框架,利用CBV的方式组织视图类以及项目的封装,使用MySql为后台数据库,实现在线直播、视频点播、师生在线互动等功能,以期能推动编程教育的推广和发展。  关键
摘要:本文提出一种变电站设备全景智能监控系统的优化方法,该方法使得系统具有全息感知,泛在互联,自主预警,高效互动等特征,能够全面提升设备状态和运检业务的智能化水平。满足社会用电需求量增长迅速,用电设备不断增多的场景,解决传统电网设备健康判断方法难以有效解决系统数据贯通,监测装置在线率低及综合分析能力差等问题。  关键词:全景监视;系统设计  Abstract:With the rapid grow
摘要:该文结合物联网技术与单片机技术设计一种智能鱼缸检测系统,系统以单片机为控制核心,综合利用单片机和物联网技术,通过相关传感器的应用,实现鱼缸智能调节水温、智能换水、智能净化水、智能加氧等功能;另外系统中的通信模块使得用户可以通过手机App远程观测鱼缸内数据,为观赏养鱼的人们提供了极大便利。  关键词:单片机;智能控制;物联网  中图分类号:TP3 文献标识码:A  文章编号:1009-30