为什么图形算法会引用上一个边缘



几乎所有与路径相关的图形算法似乎都使用的模式涉及保存用于到达当前顶点的边缘。相反,为什么当前的顶点不对下一个边缘有任何参考,类似于链接列表?我猜你可以,但是折衷是什么?

的确,这里有几种混合的概念。首先,我将浏览图数据结构。

图表

数据结构是构建数据的一种方法(好的,这很容易)。这就是您的图表在内部表示的方式。而且有很多可能性。

如果您稍微考虑一下,则图中有两个中心概念:边缘和顶点。您选择如何存储它们完全取决于您。为了简化解释,我将考虑为顶点提供一个唯一的数字,从0到V-1。

周围有几种表示,根据您的问题,一个可能比另一个更合适。基本上,顶点和边缘之间存在冗余信息,因此为两者创建一个结构都是过分的。我现在将通过两种情况。

您可以显式创建显式顶点结构。每个顶点都包含一个可以使用的顶点列表。图结构应保持所有顶点的数组,以使其有效。这是您所引用的结构,它是有效的。

在这种情况下,边缘是隐式的:如果顶点可以转到另一个,则两者之间有一个边缘。但是,没有创建边缘结构,它暗示了每个顶点中包含的列表。

第二可能性,创建一个边缘结构。每个边缘包含其起点和终点(这是顶点,可以表示为整数)。图数据结构保存一个数组,对于每个插槽,将所有边缘启动(或结束)的列表存储在此顶点。

再次,这是一个有效的数据结构,通常称为邻接列表表示。这次,没有明确的顶点结构:它们是包含在边缘的整数。

使用显式边缘(和隐式顶点),如果图形密度是密度,也有相邻的矩阵表示。

最终,选择图表的表示是最适合您的情况,并且您更好地理解,但是没有绝对的规则。

就我而言,我很快就了解了邻接列表,但是很难让我围绕第一个代表,因此您应该选择更舒服的一个。

图算法

现在是算法。这个想法是给定图形结构(无论是哪个表示),它提供了一些定义的功能,请处理此图以获取有关它的一些信息。

在DFS/BFS的情况下,搜索的信息是将图从一个源顶点横穿到每个可授权的顶点。的确,关于那些算法,每个顶点都与他的前辈之一相关联。

这是因为我们从这些算法中想要的信息是要获得从源到另一个顶点的路径的一个。当然还有其他路径,但这没关系。

实际上,找到从一个顶点到另一个顶点的所有可能路径是NP完整问题,有时是不可能的(例如,如果有一个周期)。

这就是为什么仅存储顶点的前身:因为我们想要的只是一个路径,并且在空间和内存方面都使这些算法有效。

我希望这回答您的问题并清除您的想法。

不确定您指的是哪些示例,但通常在有向图中的vertex do 保留对"下一个边缘"的引用,即附近的fertices节点。通常,它比握住邻居包含当前节点的顶点更有用。您可以同时记录两者,但缺点是:

  1. 您将磁盘空间加倍以存储图形
  2. 您(平均)(平均)删除/添加边缘的时间。

您正在谈论这个问题中的两个不同概念;算法和数据结构。与路径相关算法(例如BFS DFS)的点是,您应该能够穿越路径,即算法,但是您要如何设计数据结构取决于您,并且取决于您要解决的问题。,您的局限性和确切要求是什么。您可以检查半边缘数据结构,基于面部的数据结构,这些数据结构用于解决图形的复杂拓扑和算法问题(确切的网格)。希望它有帮助

最新更新