【译】欧拉循环为什么如此独特?它们对21世纪的我们有意义吗?

717 阅读11分钟

欧拉循环和路径是迄今为止图论中最有影响力的概念之一。然而,什么才是真正的欧拉循环和路径,18世纪的路径对未来的21世纪有什么意义?

欧拉循环和路径是迄今为止在数学和创新技术世界中最具影响力的图论概念之一。这些电路和路径是由欧拉在1736年首次发现的,因此有了 "欧拉循环 "和 "欧拉路径 "这个名字。谈到图论,理解图和创建图比它看起来要稍微复杂一些。有许多变量需要考虑,使它们看起来更像是一个难题,而不是一个实际问题。然而,当我们谈论欧拉循环和路径时,就会比较容易理解发生了什么。

欧拉循环实例|图片由作者提供

欧拉路径是图中的一条路径,每条边正好被访问一次。欧拉路径可以有任何起点与任何终点;然而,最常见的欧拉路径都会回到起始顶点。如果图形本身满足两个条件,我们就可以很容易地检测到图形中的欧拉路径:所有具有非零度边的顶点都是相连的,以及如果零或两个顶点具有奇数度,而所有其他顶点具有偶数度。请注意,在无向图中,只有一个顶点有奇数度是不可能的(欧拉路径常见于无向图中),因为在无向图中,所有度数之和总是偶数。但你可能会问,"我们怎么知道一个顶点是奇数还是偶数?"。对于那些不了解图中度数的人来说,寻找顶点的度数与寻找典型角的度数不同。如果一个顶点的边的总数是奇数,那么这个顶点就被称为有奇数度。不过,如果一个顶点的边的总数是偶数,则该顶点被称为具有偶数学位。这个奇偶顶点条件使我们能够了解一个给定的图是否是欧拉图。

要知道一个图是否是欧拉图,或者换句话说,要知道一个图是否有欧拉循环,我们必须明白,图的顶点必须被定位在每条边被访问一次,并且最后的边会回到起始顶点。欧拉循环本质上只是欧拉路径的一个扩展定义。如果这看起来令人困惑,那么可以这样想象,"是否有可能在不抬起铅笔或钢笔的情况下(一气呵成)画出图形?"。欧拉循环通常不那么常见,这是因为它关于其顶点的一个条件。还记得顶点的偶数度和奇数度吗?是的,对于一个图来说,所有的顶点必须具有偶数度,因为没有代表图中间的 "特定 "顶点。此外,每个顶点都有偶数条边,这使我们能够遍历图形并返回到起始顶点,无论我们选择什么顶点作为起点,根据定义这是我们的主要目标。

如果你没有明白,不用担心;让我们看一下视觉效果,以及我们如何用修改过的深度优先遍历算法来遍历和寻找欧拉路径和欧拉循环。我们将使用深度优先遍历法遍历与上图相同的图形,因为我们要按深度遍历路径,而不是横向遍历,因为这样做效率很低。

medium.com/media/e15cc…

在欧拉路径中,每次我们访问一个顶点时,都要经过两条未访问过的带端点的边。根据定义,欧拉路径中的所有中间顶点都必须有一个偶数度。然而,我们没有假设所有的中间顶点都有偶数的边,而是假设绝对的中间顶点是拥有最多边的顶点。此外,为了以防万一,如果两个顶点有相同的数量,这是图形中最大的顶点,我们可以选择任何一个,因为这不会影响遍历。拥有最多边的顶点意味着该顶点是大多数顶点的中间,创造了通往图中大多数顶点的路径。因此,我们已经明白,拥有最多边的顶点至少要在不同的边上走过一次以上才能遍历整个图。

使用深度优先遍历算法,我们从每个顶点开始按深度遍历每条路径。记住,每个顶点只能被访问一次;但是,有最多边的顶点可以被访问多次,以允许完整地遍历图形,因为有些顶点可能不会通向对面图形上的其他顶点。该算法将查看该顶点(或当前顶点的邻居)是否未被访问,并将其添加到路径中。否则,通过使用回溯(保持对前一个顶点及其边缘的跟踪),该算法确保如果当前顶点与最大的顶点相同,我们可以将其添加到路径中;否则,如果当前顶点已经被访问过,我们可以离开该顶点,继续遍历其边缘。这个过程对图中的每个顶点及其邻居都进行遍历,以创建每个可能的欧拉式路径。当然,该算法有一定的误差;在寻找欧拉路径时,该算法可能会走到其他顶点,而这些顶点可能不属于当前顶点的邻居。出于这个原因,在最后,我们让算法评估每条路径,并检查最大的顶点是否是路径的根顶点,因为最大的顶点与多个顶点有边。如果是,我们就可以得出结论,该路径是欧拉路径。

欧拉路径|图片由作者提供

对于欧拉循环,请记住,任何顶点都可以成为中间顶点。因此,根据定义,所有顶点都必须有一个偶数度。但请记住,欧拉循环只是欧拉路径的一个扩展定义:最后一个顶点必须通向一条未访问过的边,并通向起始顶点。在深度优先遍历的自然行为下,最后一个顶点总是有未访问的边,直到该顶点本身被遍历。我们之所以知道这一点,是因为DFS算法会跟踪已经被访问过的顶点。如果最后一个顶点是图形中唯一没有被遍历的顶点,那么它的边应该被认为是图形中唯一没有被访问的边。然而,如果还有多条边,这意味着要么该图不是欧拉图(最后一个顶点有奇数条边),要么还有一个未访问的顶点。因此,总结起来,只有一条边通向起始顶点。通过逐个深度遍历每条边,并得到我们的欧拉路径(因为有欧拉路径的图形被认为是_半欧拉的)_,我们可以比较欧拉路径的最后一个顶点是否有一条边通向我们开始的顶点。如果有,该图就被认为是欧拉图。但是你可能会问,"如果图中没有欧拉路径怎么办?"。好问题!图中总是有欧拉路径的。这就是以这样的方式重新安排图形,在其中可以创建一条每条边只穿过一次的路径。你可以把它看作是解开一个谜题!

欧拉循环 | 作者的图片

以下是我的欧拉循环和路径模拟的链接:https://github.com/GEEGABYTE1/Eulerian

但为什么欧拉循环和路径如此重要?每条边都准确地穿越一次,并在我们开始的地方结束,这有什么意义?欧拉循环和路径有许多实际应用。在数学上,图形可以用来解决许多复杂的问题,比如柯尼斯堡桥问题。此外,邮递员可以使用欧拉路径来拥有一条不用重走之前的路线。在更广泛的范围内,欧拉循环和路径对画家、垃圾收集、飞机驾驶员、GPS开发者(例如谷歌地图开发者)、分发广告的营销人员都很有用;基本上,任何使用路径的人或事物都可以使用。

让我们来看看一个普遍存在的图形问题,称为_旅行推销员,_来看看欧拉路径和循环对推销员和女推销员的意义,作为一个例子。这个问题是,你有一个城市图,它们之间有一定的距离(边的权重)。目标是找到最短的路径,使你能够访问每个城市一次,然后在你开始旅行的城市离开。

为了解决这个问题,并让你了解欧拉路径和循环在现实生活中的应用,我开发了一种贪婪算法,可以输出访问所有城市的最具成本效益的路径。

medium.com/media/353ab…

假设销售人员要去城市[a,b,c,d],以一定的成本走一条路(例如,从a点到d点的成本值为5),该算法评估了一个城市(当前顶点)的每个邻居的权重。我们开始时将所有的地方设置为未访问,因为我们实际上还没有穿越它们。现在,我们随机得到一个当前顶点(我们的起点),因为我们希望我们的算法能够计算每一种可能的情况和路径,在这种情况下,这将是_4个!_ (因为我们有4个输入)。(因为我们有4个输入)。为了比较边和它们的权重,我们得到权重最小的边(假设它是最便宜的),在把它加入最终路径后,我们把它设为当前顶点,最终路径将被返回。就像记录边和顶点以查看图形是否有欧拉路径或循环一样,该算法通过不断更新记录未访问和已访问顶点的字典,来记录每次当前顶点更新(去往下一个城市)的所有已访问顶点。我们这样做是因为我们不希望销售人员回到他们已经走过的路径上,就像我们不希望我们的遍历算法在寻找欧拉路径时遍历一条已经被遍历过的边。

请看我对旅行推销员问题的完整解决方案:https://github.com/GEEGABYTE1/TravelingSalesMan

假设我总结一下前面两段关于欧拉循环和路径的重要性。在这种情况下,它们是必不可少的,因为它们是最佳寻路或一般寻路的基础。多年来,随着新算法的引入,寻路技术得到了极大的发展,但它们到底有什么重要意义呢?信不信由你,我们知道的大多数算法都是寻路算法。使用寻路概念和欧拉路径的最流行的算法之一是谷歌地图和他们高效的路线寻找算法,Uber的司机和旅客寻找算法(当我们订购Uber并看到司机的位置时,这就是他们的寻路算法在工作!),特斯拉的功能,他们的汽车可以自动驾驶给车主,在互联网上路由数据包,以及更多!你看到这些算法中的共同点吗?在我刚才列举的这些算法中,你看到有什么共同点吗?这些算法减少了不必要的路径和距离来到达所需位置的额外工作。有了欧拉路径和循环,这些寻路算法在一个全新的水平上引入了旅行效率(记住,寻路算法和欧拉路径有相同的基本行为)。随着技术和算法的不断发展,它们将以更好的速度继续这样做。再次回顾一下旅行推销员问题。欧拉路径不是让推销员以随机的成本去旅行,直到他们完成任务,而是通过减少旅行所需的能量和推销员的潜在总成本,让推销员更有效地旅行。

欧拉循环和路径在许多领域都有帮助。数学和寻路恰好是我们今天拥有的许多突出和相关的例子之一。这些循环和路径是许多小的数学模型之一,给我们的日常生活带来了突破性的进展。因此,想象一下,还有许多其他数学表达式、模型和悖论在我们的生活中创造的突破,而我们甚至没有注意到!这就是我们的生活。不过别担心,作为一个对数学和计算机科学充满热情的人,我将继续写下著名数学家的各种数学概念和当今不断增长的创新技术如何相互关联,共同帮助我们更 "有效 "地生活


欧拉循环。它们为什么如此独特,对21世纪的我们有意义吗?原文发表在《走向数据科学》杂志上,人们通过强调和回应这个故事继续对话。