Table of Contents
理解图理中的欧莱安电路
欧莱安电路是一条完全穿过一个图的每个边缘,然后返回起始顶点的闭路步行,这个概念起源于1736年莱昂哈德·欧勒提出的著名的科尼格斯贝格七桥问题. 欧莱尔证明,只有图中的每个顶点都有均匀的度,且图的连接(忽略孤立的顶点),这种基本结果为图理论奠定了基础,在网络分析,电路设计和组合优化方面仍然至关重要.
正式声明: 让 G = (V ], E ]] 成为一个无方向的图。如果并且只有在每个顶点[v]] 的 Q V 具有均匀度,而且当考虑只有非零度的顶点时,图就连在一起。对于定向图来说,每个顶点在方位和度之间都相等,而基础的无方向图是相连的。
希霍尔策的算法是什么?
希霍尔策的算法由德国数学家卡尔·希霍尔策在1873年出版,是满足必要条件时构建欧莱安电路的有效方法。它通过寻找一系列循环并把它们合并而构建电路。算法在线性时间O(]E],在边缘数量上运行,使其对密度和稀疏的图表都具有最佳效果。
主要概念
- 循环检测: 从顶点开始,跟随未使用的边缘,直到返回起始顶点。这构成一个简单的循环。
- 模拟周期:[ 当当前电路上的顶点仍有未使用的边缘时,从该顶点形成一个新的循环并插入到电路中.
- 消除边: 由于边缘被使用,所以它们被标记或去除以避免重现.
希霍尔策算法的逐步描述
算法可以递归或迭代执行。核心思想是通过反复延伸子路来构建一个电路。下面是详细的细分。
步骤1: 选择起始 Vertex
选择任何至少有一个边的顶点。 由于图是相连的, 并且所有度是均匀的, 任何顶点都会起作用。 通常算法会从顶点开始 [ [FLT: 0]]v [[FLT: 1]] 。
步骤2:循环
从当前顶点跟踪任何未使用的边缘到邻居。 继续沿着未使用的边缘移动, 按旧的边标每个边缘, 直到返回起始顶点。 这会产生一个周期 [ [FLT: 0] C [[[FLT: 1]] 。 如果循环包含图表的所有边缘, 算法终止 – 我们有一条Eulerian 电路 。
步骤3: 找到未使用的边缘的Vertices
扫描任何尚未使用的事件边缘的顶点u 的当前电路。如果没有,算法就已完成。否则,请让u 成为这样的顶点。
步骤4:从]u 构建一个新的循环
从u 开始,在未使用的边缘中重复循环的查找过程。这创造了一个新的循环C ' ,开始和结束在u ]。
步骤5:将新循环合并到主电路中
在主电路中的位置插入u]]。产生的行走仍然是一条电路(闭路),覆盖迄今访问过的所有边缘。返回到第三步。
因为每个顶点都有均匀的度,所以过程永远不会被卡住:每当你进入顶点时,总是会有未使用的边缘离开,直到顶点的度变为零。 算法保证了最后的行走会包括每个边缘一次。
示例: 构建一个Eulerian 电路
考虑一个没有定向的图,其中的顶点为A、B、C、D和E。 边缘为:AB、AC、AD、BC、BD、CE、DE。 (这是一张小图,每个顶点都有偶数级: deg(A)=3、deg(B)=3、deg(C)=2、deg(D)=3、deg(E)=1),这不符合均数级条件。让我们用一个图,所有程度均匀:A-B、B-C、C-D、D-A,加上A-C和B-D。这给出了每个顶点3级的图,这是奇数。实际上,一个简单的偶数级图:每个顶点为2的三角形? 并不有趣。让我们用一个更典型的例子:1,2,3,4,5,5,5,5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
运行 Hierholzer 的算法 :
- 开始于顶点1. 跟踪边:1 ⁇ 2(使用),2 ⁇ 3(使用),现在为3 选择未使用的边缘 3 ⁇ 4(使用),4 ⁇ 5(使用),5 ⁇ 3(使用),返回到3,但初始起点是1. 我们还没有返回到1。实际上算法需要形成一个循环,返回到顶点。 让我们正确地追踪:从1开始,走1 ⁇ 2,2 ⁇ 3,现在从3开始,可以走3 ⁇ 1(未使用),这给了1 ⁇ 2 ⁇ 3 ⁇ 1 。
- 扫描 C1: 顶点 3 有未使用的边缘。 开始新周期为 3 ⁇ 4, 4 ⁇ 5, 5 ⁇ 3 。 C2 = 3 ⁇ 4 ⁇ 5 ⁇ 3 。
- 在顶点3时将C2合并为C1: 由此形成的电路:1 ⁇ 2 ⁇ 3 ⁇ 4 ⁇ 5 ⁇ 3 ⁇ 1. 所使用的所有边缘,电路为Eulerian.
这个例子说明了算法的优雅性:循环被发现,并被无缝地结合.
复杂性和实施情况
Hierholzer的算法运行时间为[]OV]+E]],使用辅助列表表示和高效的数据结构进行边缘清除(例如使用指示器或链接列表). 算法是最佳的,因为每个边缘都经过一次精确处理. 内存间接费用是O(+[E]),用于存储图和电路.
对于定向图,如果图是Eulerian(在每一顶点下,in 等值为度 ) , 同样的方法也起作用。 算法对偶数的要求也转化为定向的大小写。
与 Fleury 算法的比较
另一种著名的寻找Eulerian电路的算法是Fleury的算法,它通过线性时间复杂和更加简单的执行来操作,同时确保剩余图的连接(即避免桥梁 ) 。 Fleury的算法运行在 O ( E ] 2] 时间,因为它需要检查连接。 Hierholzer的算法一般倾向于线性时间复杂和简便的操作。 唯一的下边是Hierholzer的算法要求图为Eulerian ( even 度) , 而Fleury的算法也可以处理半Eulerian 图形(当时有两个顶点有奇异的,产生Eulerian 线索 ) 。 然而,Hierholzer的算法也可以通过在两个奇异度的垂直之间添加一个假边,构建电路,然后去除去掉假边。
希霍尔策算法的应用
高效地找到Eulerian电路的能力,有许多真实世界的用途。
中国邮政问题
在中国邮政问题(例行检查)中,目标是找到至少覆盖每个边缘一次的最短闭路。 对于已经是Eulerian的图表来说,解决方案只是Eulerian的电路。 Hierholzer的算法提供了电路。 对于非Eulerian的图表来说,问题会减少重复边缘,从而实现所有程度的均匀,然后应用Hierholzer的。
网络路线和电路设计
欧莱安电路用于设计街道扫荡器、垃圾收集、网络包传输的有效路线,每个链接必须精确地穿行一次。算法有助于尽量减少冗余旅行。
DNA 分裂大会
在计算生物学中,德布鲁因图法对基因组组装的处理依赖于通过k ⁇ mer图寻找Eulerian路径或电路。 希尔霍尔泽的算法是许多组装器的核心组成部分,能够从短读重建毗连序列。
计算机图形和磁带生成
欧莱安小径用于生成迷宫和某些图画算法,其中边缘必须绘制而不提笔. 算法提供了最佳构造.
集成电路测试
在非常大"比例集成(VLSI)设计中,测试所有连接都可以作为Eulerian电路问题进行模型化,将测试器的运动降到最低.
进一步阅读和外部资源
为了加深你对欧莱安电路和希尔霍尔策算法的理解,建议提供以下资源:
- 厄莱安路径 – 维基百科 – 定义,历史和算法的全面概述.
- 厄莱恩路径 – CP算法 – 详细解释,附有C++执行和复杂性分析.
- 希尔霍尔泽的算法 – Wolfram Mathworld – 数学视角.
- NetworkX:Eulerian路径示例 – 使用Python的网络分析库进行实用演示.
- Hierholzer的定向图算法 — GeeksforGeeks[ — 多种语言的实现.
结论
希霍尔泽的算法仍然是图轨的支柱,因为它具有优雅、速度和广泛的适用性。 通过将问题分解为寻找和合并循环,它为构建欧莱利安电路提供了直接和最佳的解决方案。 无论您正在设计网络路线、组装基因组,还是解谜,理解这个算法都为您提供了处理偶数度顶点的图的强大工具。 它的线性时间复杂性和简单的递归结构使得它成为算法爱好者和从业者中最喜爱的。