算法合集之《平面嵌入》

合集下载

平面嵌入(精)

平面嵌入(精)

外部活跃与相关
设当前处理节点为v, 对于原有节点,定义如下:
外部活跃节点: 与v的祖先有连接的节点
子块中有外部活跃节点的节点
相关节点: 与v有连接的节点
子块中有相关节点的节点
外部活跃与相关 u v v’ s s’ k w w’ e
在这张图中,当前处理节点为v,k,s为外部活跃节 点,e,w为相关节点.
Walkdown — 向下很快遭遇终止节点 而终止遍历,这将导致需要加入的边没有加入到图GP中. 所以在遍历的时候有一个原则. 尽量晚的终止遍历. 有两个法则来约束遍历,从而维护这个原则.
Walkdown — 向下遍历(2)
法则1: 当节点有多个子块需要遍历的时候,总是先进入没 有外部活跃节点的子块进行遍历. 法则2: 每次进入子块进行遍历都优先选择是走向只具有 相关性节点方向,否则选择走向具有相关性的节点 的方向.
翻转操作
u
v
v’
w w w w w w w w w w w w w w w w w w w w w w w w w w w w
e e e
Walkdown — 向下遍历(3)
u v
v’ w
w
s s1 s2 k k
e
e
信息取得
算法需要有快速取得外部活跃信息和相关信息的方法. 对于外部活跃信息可以通过预处理和以后的维护来 快速取得. 对于相关节点,可以在向下遍历时查找取得.O(n)的 算法有另一种取得方式(请参考论文). 接下来我们具体介绍外部活跃信息的取得.
加入树边 当处理节点v的时候,会首先加入节点v的树边,不过 在加入树边的时候得做一个分离操作:
v2 v1 v
c1
c2
将v1和v2称做它们所在的连通分量的根.

算法合集之《平面嵌入》

算法合集之《平面嵌入》
维护SDlist: 在节点所在块与其子块合并后,将该儿子在该节点 的SDlist中的值删除.
外部活跃信息的取得
快速的得到外部活跃信息: 节点连接的最早祖先或者SDlist中的第一个值小 于v,该节点就是外部活跃节点.
虚边 v’
s w
在上面的图中,s到w部分以后都是不会用到的.加入边 (v’,w)覆盖它.
翻转操作u v v’
wwwwwwwwwwwwwwwwwwwwwwwwwwww eee
Walkdown — 向下遍历(3)
u v v’
w w
s s1 s2
k
ke
e
信息取得
算法需要有快速取得外部活跃信息和相关信息的方法.
对于外部活跃信息可以通过预处理和以后的维护来 快速取得. 对于相关节点,可以在向下遍历时查找取得.O(n)的 算法有另一种取得方式(请参考论文).
Walkdown — 向下遍历(2)
由于终止节点的存在,随机的遍历会很快遭遇终止节点 而终止遍历,这将导致需要加入的边没有加入到图GP中. 所以在遍历的时候有一个原则.
尽量晚的终止遍历.
有两个法则来约束遍历,从而维护这个原则.
Walkdown — 向下遍历(2)
法则1: 当节点有多个子块需要遍历的时候,总是先进入没 有外部活跃节点的子块进行遍历.
接下来我们具体介绍外部活跃信息的取得.
外部活跃信息的取得
快速的取得外部活跃信息外部活跃信息. 给每个节点配备一个lowpoint,表示它能直接或者间接 到达的最早祖先,间接是指通过它的子孙到达. 可以通过开始的深度优先搜索取得所有节点的lowpoint.
外部活跃信息的取得
给每个节点配备一个SDlist,其中记录它的所有儿子, 并且是按照他们的lowpoint从小到大排序的.

算法合集之《平面嵌入》

算法合集之《平面嵌入》

平面嵌入四川绵阳南山中学古楠[引子]什么是平面嵌入呢?大家还记得冬令营2005的蜂窝玉米吗?它涉及到了图的一个性质,那就是所有的边都不能相交。

图这个性质叫做图的平面性。

当我们需要知道一个图是否具有平面性和这张图实现平面性后的结构时,平面嵌入算法就是一个好的工具。

[摘要]本文主要由两大部分构成。

第一部分主要介绍了平面嵌入的算法,其中包括了具体的操作,复杂度的分析,正确性的证明和一些相关题目。

第二部分主要是附录,包含参考文献和伪码。

[关键字]平面,嵌入,内部活跃,相关,外部活跃,块,根边,回落边[目录]一.算法--------------------------------------------------11.平面嵌入的相关定义----------------------------------12.算法的目的------------------------------------------23.一些相关的知识--------------------------------------24.算法总揽--------------------------------------------25.边的嵌入--------------------------------------------36.外部活跃,相关与内部活跃----------------------------37.反转操作--------------------------------------------58.一个全面的分析--------------------------------------68.1 walkup函数-------------------------------------78.2 walkdown函数-----------------------------------89.复杂度的分析----------------------------------------910.正确性的证明---------------------------------------1011.相关题目-------------------------------------------1212.总结-----------------------------------------------12 二.附录--------------------------------------------------121.MergeBiconnectedComponent伪码 ----------------------132.walkup伪码------------------------------------------133.walkdown伪码----------------------------------------14[算法]1.平面嵌入的相关定义如果对平面嵌入还有些陌生,希望下面的定义对你有所帮助。

数学:平面镶嵌知识简介

数学:平面镶嵌知识简介

数学:平面镶嵌知识简介各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢用若干类全等形无间隙且不重叠地覆盖平面的一部分,叫做这几类图形能镶嵌平面.镶嵌的一个关键点是:在每个公共顶点处,各角的和是360°.最简单的镶嵌是只用一类全等形镶嵌平面.以下对平面镶嵌问题从三个方面略作介绍.一、用一种任意多边形镶嵌1.全等的任意三角形能镶嵌平面把一些纸整齐地叠放好,用剪刀一次即可剪出多个全等的三角形.用这些全等的三角形可镶嵌平面.这是因为三角形的内角和是180°,用6个全等的三角形即可镶嵌出一个平面.如图1.用全等的三角形镶嵌平面,镶嵌的方法不止一种,如图2.2.全等的任意四边形能镶嵌平面仿上面的方法可剪出多个全等的四边形,用它们可镶嵌平面.这是因为四边形的内角和是360°,用4个全等的四边形即可镶嵌出一个平面.如图3.其实四边形的平面镶嵌可看成是用两类全等的三角形进行镶嵌.如图4.3.全等的特殊五边形可镶嵌平面圣地亚歌一位家庭妇女,五个孩子的母亲玛乔里·赖斯,对平面镶嵌有很深的研究,尤其对五边形的镶嵌提出了很多前所未有的结论.1968年克什纳断言只有8类五边形能镶嵌平面,可是玛乔里·赖斯后来又找到了5类五边形能镶嵌平面,在图5的五边形ABcDE中,∠B=∠E=90°,2∠A+∠D=2∠c+∠D=360°,a=e,a+e=d.图6是她于1977年12月找到的一种用此五边形镶嵌的方法.用五边形镶嵌平面,是否只有13类,还有待研究.4.全等的特殊六边形可镶嵌平面1918年,莱因哈特证明了只有3类六边形能镶嵌平面.图7是其中之一.在图7的六边形ABcDEF中,∠A+∠B+∠c=360°,a=d.5.七边形或多于七边的凸多边形,不能镶嵌平面.二、用同一种正多边形镶嵌只有正三角形、正方形和正六边形可镶嵌平面,用其它正多边形不能镶嵌平面.三、用多种正多边形镶嵌例如:用正三角形和正六形的组合进行镶嵌.设在一个顶点周围有m 个正三角形的角,有n个正六边形的角.由于正三角形的每个角是60°,正六边形的每个角是120°.所以有m·60°+n·120°=360°,即m+2n=6.这个方程的正整数解是或可见用正三角形和正六边形镶嵌,有两种类型,一种是在一个顶点的周围有4个正三角形和1个正六边形,另一种是在一个顶点的周围有2个正三角形和2个正六边形.如图8、图9.读者可探究用其它两种正多边形或两种以上的正多边形进行镶嵌的问题.各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢。

绝对经典!嵌入式开发者都该了解的10大算法

绝对经典!嵌入式开发者都该了解的10大算法

绝对经典!嵌入式开发者都该了解的10大算法算法一:快速排序法快速排序是由东尼·霍尔所发展的一种排序算法。

在平均状况下,排序 n 个项目要Ο(n log n)次比较。

在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。

事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

算法步骤1 从数列中挑出一个元素,称为 “基准”(pivot),2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。

在这个分区退出之后,该基准就处于数列的中间位置。

这个称为分区(partition)操作。

3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。

虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

算法二:堆排序算法堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。

堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

堆排序的平均时间复杂度为Ο(nlogn) 。

算法步骤创建一个堆H[0..n-1] 把堆首(最大值)和堆尾互换 3. 把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置 4. 重复步骤2,直到堆的尺寸为1算法三:规并排序归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。

该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

用模拟退火算法实现二层图的平面嵌入

用模拟退火算法实现二层图的平面嵌入
模拟退 火算法 。 利用此模拟退 火算法可以找 出给定的二层 图的近似最大二层平面子 图, 而可以将其嵌入到 平面上。结果 显示 从
在该模型 的基础上模拟退火算法可以找 出比 H e 0 I d网络更优的二层平面子图。
关键 词 : 模拟退火; 组合优化; 二分图; 二层图; 平面化问题 中图分 类号 :P T3 文献标识码 : A 文章编 号 : 0-21(060-00—0 1 8 8620 )1 ll 2 0 -
1前 言 .
在 自然界 和人类社 会 的实 际生 活中 , 用图形来 描述某
些对象或事物之 间具 有某 种特定 关系是非 常普遍 的 , 如用 工艺 流程 图来描述某 项工 程中各工 序之 间的先后 关系 , 用 网络图来描述通讯 系统 中各通讯 站之 间信 息传递 关系 , 用
1 2 3 4 5 6

图 1b 上下各有 6个点的二层平面图 .
应用 , 比如在 V S 电路设计 、 II 网络布线分析与设计 、 市管 城 道与道路规划 、 以及 D A的可视化映射等 领域 。此类 问题 N 是 N _ 完全 问题 , P- J 但是 因为 它具有 广泛 的实 际 意义 , 到 目前为止 已经诸多 的文献用不 同的方 法对其进 行 了描述和 解决 , 是效 果都 不尽人 意。如 Eds W is e 把它 转 但 ae 和 ht i s ed 换为线性问题 来解决 , 是当问题 的规模 增大 时该算法 的 但
个集合的两个 点。当一个二分 图用以下 的方式 画在平面
上: 其中 A中的点排在一条直线上( 我们称其为上层) 曰 ,
中的点也排 在一条直线 上( 我们 称其 为下层 )所 有 的边 均 , 是直线 , 此时我们称其为二层 图【 , 图 1a 如 J . 所示 。当一个 二层 图的所有 的边 除 了共 同的结 点之外 , 彼此之 间都没 有 交叉 的时候 , 此时我们称这个二层 图为二层平 面图如 图 1 .

小学数学知识归纳平面镶嵌形的拼接与计算

小学数学知识归纳平面镶嵌形的拼接与计算

小学数学知识归纳平面镶嵌形的拼接与计算小学数学知识归纳:平面镶嵌形的拼接与计算平面镶嵌形是指由一些特定的几何图形拼接在一起所形成的封闭图形,这些几何图形可以是三角形、四边形或其他规则的多边形。

在学习数学的过程中,小学生常常会遇到关于平面镶嵌形的问题。

本文将为大家归纳整理平面镶嵌形的拼接与计算方法。

1. 三角形的拼接与计算三角形是最简单的平面镶嵌形,它由三条边和三个角组成。

要拼接三角形,需要注意以下几点:(1)三角形的内角和为180度,所以在拼接时要保证相邻两个三角形的边和角能够配合完美,边与边相接,角与角相加为180度。

(2)三角形的边长可以通过勾股定理或正弦定理进行计算,根据已知条件求出未知边长。

(3)已知三角形的面积可以通过海伦公式或高度乘底边长的一半进行计算。

2. 四边形的拼接与计算四边形是常见的平面镶嵌形,常见的四边形有正方形、长方形、菱形等。

要拼接四边形,需要考虑以下几点:(1)相邻两边的长度要保持一致,以确保拼接的四边形形状准确。

(2)正方形的特点是四个边长相等,内角度数均为90度。

(3)长方形的特点是相对的两个边(长和宽)相等,内角度数均为90度。

(4)菱形的特点是对角线相等且相互垂直,两组相对边长度相等。

3. 多边形的拼接与计算除了三角形和四边形之外,我们还可以用其他多边形进行平面镶嵌形的拼接与计算。

例如五边形、六边形等。

拼接多边形需要注意以下几点:(1)相邻两边的长度要保持一致,以确保拼接的多边形形状准确。

(2)各个内角的度数之和要满足多边形的性质。

(3)计算多边形的面积可以使用鞋带公式或分割为多个三角形计算再求和。

综上所述,了解平面镶嵌形的拼接与计算方法对于小学生学习数学非常重要。

通过认识不同的几何图形,学生可以提高对平面镶嵌形的认知能力,培养空间想象力,并能够解决与平面镶嵌形相关的问题和计算。

希望本文的整理能够帮助到小学生在数学学习中对平面镶嵌形的理解与运用。

初中数学平面镶嵌体现的核心素养

初中数学平面镶嵌体现的核心素养

初中数学平面镶嵌体现的核心素养平面镶嵌是数学中的一个重要概念,它不仅可以让我们学习到丰富的几何知识,而且能够培养我们的数学思维和解决问题的能力。

下面就让我们一起来看看,平面镶嵌体现的核心素养是什么吧。

首先,平面镶嵌需要我们具备观察力和空间想象力。

在平面镶嵌中,我们要将各个形状的图案拼接在一起,并使之完全贴合,这就需要我们能够准确地观察每一个形状的边界线和角度,并能够想象它们在平面上的位置。

这种观察力和空间想象力是平面镶嵌的基础,它能够培养我们的几何思维,提高我们的空间认知能力。

其次,平面镶嵌需要我们善于解决问题和分析推理。

在平面镶嵌中,我们常常会遇到一些图案的缺口,需要我们找到最合适的形状来填补。

这就要求我们具备解决问题的能力,并能够分析和推理出最佳的解决方案。

通过不断地练习,我们可以提高自己的问题解决能力和分析推理能力,培养我们的逻辑思维能力。

另外,平面镶嵌还需要我们具备耐心和细心的特点。

平面镶嵌有时需要我们多次尝试和调整,才能找到最佳的拼接方式。

而且在拼接的过程中,我们还要注意每个形状的边界线是否完整,角度是否一致等等。

这就需要我们具备耐心和细心的特点,通过不断地调整和修正,才能最终完成一个完美的镶嵌。

这种耐心和细心的特点是平面镶嵌的重要要素,它能够培养我们的细致观察和耐心钻研的品质。

最后,平面镶嵌还需要我们具备团队合作的能力。

在一些复杂的镶嵌任务中,往往需要多人共同合作才能完成。

团队成员之间需要相互沟通和协作,共同解决问题。

通过团队合作,我们可以学会倾听和尊重他人的意见,也能够体验到集体智慧的力量。

这种团队合作的能力是平面镶嵌的精髓之一,它能够培养我们良好的人际关系和团队合作意识。

总之,平面镶嵌体现的核心素养包括观察力和空间想象力、解决问题和分析推理能力、耐心和细心的特点,以及团队合作的能力。

通过平面镶嵌的学习和实践,我们可以全面培养这些素养,提高我们的数学思维和解决问题的能力,为我们未来的学习和生活打下坚实的基础。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

平面嵌入四川绵阳南山中学古楠[引子]什么是平面嵌入呢?大家还记得冬令营2005的蜂窝玉米吗?它涉及到了图的一个性质,那就是所有的边都不能相交。

图这个性质叫做图的平面性。

当我们需要知道一个图是否具有平面性和这张图实现平面性后的结构时,平面嵌入算法就是一个好的工具。

[摘要]本文主要由两大部分构成。

第一部分主要介绍了平面嵌入的算法,其中包括了具体的操作,复杂度的分析,正确性的证明和一些相关题目。

第二部分主要是附录,包含参考文献和伪码。

[关键字]平面,嵌入,内部活跃,相关,外部活跃,块,根边,回落边[目录]一.算法--------------------------------------------------11.平面嵌入的相关定义----------------------------------12.算法的目的------------------------------------------23.一些相关的知识--------------------------------------24.算法总揽--------------------------------------------25.边的嵌入--------------------------------------------36.外部活跃,相关与内部活跃----------------------------37.反转操作--------------------------------------------58.一个全面的分析--------------------------------------68.1 walkup函数-------------------------------------78.2 walkdown函数-----------------------------------89.复杂度的分析----------------------------------------910.正确性的证明---------------------------------------1011.相关题目-------------------------------------------1212.总结-----------------------------------------------12 二.附录--------------------------------------------------121.MergeBiconnectedComponent伪码 ----------------------132.walkup伪码------------------------------------------133.walkdown伪码----------------------------------------14[算法]1.平面嵌入的相关定义如果对平面嵌入还有些陌生,希望下面的定义对你有所帮助。

(1)平面作图:一张图能够转化会为一张所有边都不相交的图(在节点上相交不算),转化过程就叫做平面作图。

(原来相连的节点在转化后依然相连,图1展示了平面作图)(2)平面图:一张图能够进行平面作图它就是平面图,否则为非平面图。

(3)平面嵌入:和平面作图是等价的,不过在储存方式上是这样的,对于每个节点都顺时针储存和它连接节点。

我们将记录用的表叫邻接表。

注意:本篇论文所有的平面都是指这里的相关定义,和几何平面是不同的。

图12.算法的目的在明白了平面嵌入的一些基本定义以后。

对于给定的图G,它有n个节点,m条边。

(以后我们将始终用n表示图G的节点个数,m表示图G的节点边数)算法的目的就是用O(n)的时间判断一个图是否为平面图,如果是的话要用O(n)的时间实现平面嵌入。

3.一些相关的知识为了实现我们的目的,我们必须先知道一些必要的知识。

这些知识将包含深度优先搜索,双连通分量,关节点,计数排序(一个复杂度和关键码范围有关的算法)。

还要知道一些必要的定理,如一个平面图的边将不能超过3n-5条边,否则它将是一个非平面图。

Kuratowiski 曾经证明了两个图将阻碍平面嵌入的进行,那就是图2所描述的图,我们称作k5图和k33图。

一张图中如果包含了k5图和k33图的同胚图(如果一个图可以通过延展,弯曲,合并连接节点的方式转化为另一张图,这两张图就是同胚的),那么这张图一定是非平面图,反之也成立。

我们的算法有一个基本操作,就是加边操作。

我们创建一个图GP,我们要将原图中的边按照一定的顺序加入图GP中。

我们把这个操作称作边的嵌入。

为了叙述的通顺性,有关复杂度的分析和正确性的证明我都会放到论文的末尾。

图24.算法总览为了后面的叙述更加清晰,这里将叙述算法的总体过程。

我们只讨论对双连通分量图的平面嵌入,对于有关节点的图,我们可以将图从关节点处断开分别进行平面嵌入后再合并。

首先对图进行一次深度优先遍历,得到一棵深度优先搜索树和图的逆向深度优先搜索序(由于深度优先搜索序简称DFI序,所以后面写作逆向DFI序)。

我们将每个节点和它儿子相连的边叫做树边,将和它后裔相连的边叫做回落边(注意:我们指的后裔是不包括儿子的)。

然后我们按照逆向的DFI序依次处理每个节点。

所谓处理节点就是:首先将它的树边嵌入图GP中,然后将它的的回落边都嵌入到图GP中,我们并不处理它和它祖先相连的边(祖先是包括父亲的)。

如果嵌入过程失败,那么可以得到图G是非平面图的结论,否则就完成构造。

5.边的嵌入我们算法最重要和操作就是对边的嵌入,我将针对图3进行详细的说明,在图3(a)中,我们要嵌入边(v,w)。

在开始的时候该连通分量包含了一个关节点r,我们将r去掉后该连通分量就变成了两个部分,就象图3(b)。

然后分别给两个分量配上一个r, 这样r就被分成了两个,象图3(c)。

然后将边(v,w)嵌入,然后将两个连通分量合并在一起,这时候,r已经不再是关节点了,象图3(d)。

这样我们就完成了一个最基本的嵌入操作。

为什么要这么麻烦呢?大家注意到图3(d)了吗?它的下半部分左右颠倒了,这也是嵌入时候的一个操作,叫做反转操作,这个操作是为了保证图GP的一个重要性质,这些都将在下文中提到。

图3在我们的嵌入过程中,只要图GP中含有关节点,我们都将从这个关节点把它所在的连通分量断为两个部分。

在嵌入回落边的时候又会将他们组合在一起。

这样,图GP就是由很多的双连通分量组成的,请大家注意,在代码的实现中我们必须实际的这样处理,并不是为了理解。

6.外部活跃,相关与内部活跃反转操作所要保护的性质就是:在嵌入边的过程中所有的外部活跃节点都必须留在外部面上。

什么是外部面呢?外部面的名称很形象,也就是图中接触到最外层空间的点和边构成的面,并且外部面都会是完整的环,如果一个双连通分量只有一条边,那么我们就要进行相应的转化,像图4这样。

图4外部活跃节点的定义就要复杂些,为了清楚的叙述,我们要加入些新的定义。

我们将双连通分量中DFI序最小的节点称作该双连通分量的根节点。

由于我们在只有嵌入树边的时候才会产生分离操作,所以我们会发现当一个关节点被分离成多个后,和儿子分到一个分量中的节点一定会成为该分量的根节点。

我们把这些节点称作复制点,把唯一的不是根的点称作原节点。

假设r是一个双连通分量B的根节点,那么r 在该双连通分量中一定只有一个儿子,若r有两个儿子c1,c2,由于是深度优先遍历,在访问到c1后,继续访问的过程中将通过双连通分量B的某一条路径不经过r 到达c2,那么c2将不会成为r的儿子,也就与假设矛盾。

我们设定r 的这个唯一儿子为c,那么我们将r 到c 的边称做根边(由于我们只有在加入树边的时候才会导致双连通分量的拆分,所以根边一定是树边),将该根节点称作节点(儿子还没有确定的我们写作r’),将该双连通分量称做块。

这样就可以和原r 节点区分开并且双连通分量也可以明确表示(后来的叙述都将遵从这里的设定)。

子块的定义在这里就产生了,我们将块称做原节点r 的子块。

知道了这些后,只要满足下面两个条件的任何一个,它就是外部活跃节点:(1) 当我们在处理节点v的时候,该节点处理过,并且有直接连接v的祖先的边。

(2) 当我们在处理节点v的时候,该节点处理过,并且该节点的子块中存在外部活跃节点。

就象图5中,方形的点都是外部活跃节点。

那么我们怎么得到外部活跃节点的信息呢?我们把每个节点本身能够直接到达的最早祖先的深度记做该节点的ecpoint,把能够直接或者间接到达的最早祖先的深度叫做该接点的lowpoint(所谓间接就是通过它的子孙到达)。

同时,我们给每个节点配备一个图5图5:z有直接连接v的祖先u的边所以,v是外部活跃节点,,z在d的子块中,所以d 也是外部活跃节点,d在x的子块中,所以x也是外部活跃节点。

SDlist ,它是一个双向链表,其中记录了它的每个儿子的lowpoint。

并且,SDlist中的lowpoint 值是按照从小到大排序的,为了满足这个条件,我们需要一次排序。

因为我们的lowpoint 值和深度有关,所以深度大小不会超过n。

在求出所有节点的lowpoint后,就可以用计数排序将它们按照从小到大排序,再依次加入它们父亲的SDlist中。

那么如何快速的得到lowpoint 呢?在深度优先搜索的时候,可以顺便得到它的ecpoint,在深搜返回的时候再将它的ecpoint 和它的儿子中最小的lowpoint值做比较中,返回较小的给它父亲。

这样就可以用O(n)的时间得到所有的lowpoint和SDlist。

当需要知道一个节点的外部活跃信息时,只需要看它的ecpoint和SDlist的第一个值是否小于当前处理节点的深度。

在以后嵌入回落边的时候,儿子和父亲会合并到一个双连通分量中,那么将该儿子在父亲的SDlist中的值删掉,这样,我们就可以用常数的时间判断一个节点是否是外部活跃节点。

和外部活跃节点类似的定义还有相关节点,只要满足下面两个条件它就是相关节点:(1)在处理节点v的时候,该节点处理过,并且和v有直接连接的边。

(2)在处理节点v的时候,该节点处理过,并且该节点的子块中存在相关节点。

注意:一个节点可以既是外部活跃节点,又是相关节点。

和外部活跃节点对立的是内部活跃节点,内部活跃节点就是节点是相关节点,但是不是外部活跃节点。

非活跃节点就是既不是外部活跃节点,又不是相关节点。

和这些定义对应的还有:外部活跃块:包含外部活跃节点的双连通分量。

相关块:包含相关节点的双连通分量内部活跃块:包含相关节点,但是不包含外部活跃节点的双连通分量。

非活跃块:不包含外部活跃节点,也不包含相关节点的双连通分量。

相关文档
最新文档