📜  图形数据结构

📅  最后修改于: 2020-09-28 02:23:07             🧑  作者: Mango

在本教程中,您将学习什么是图数据结构。此外,您还将找到图形的表示形式。

图形数据结构是具有数据并连接到其他节点的节点的集合。

让我们尝试通过一个例子来理解这一点。在facebook上,一切都是节点。包括用户,照片,相册,事件,组,页面,评论,故事,视频,链接,注释…任何有数据的都是节点。

每个关系都是从一个节点到另一个节点的一条边。无论您发布照片,加入群组(例如页面)等,都会为该关系创建新的边缘。

graph data structure explained using facebook's example. Users, groups, pages, events, etc. are represented as nodes and their relationships - friend, joining a group, liking a page are represented as links between nodes
图形数据结构示例

然后,所有的facebook都是这些节点和边缘的集合。这是因为facebook使用图形数据结构来存储其数据。

更准确地说,图是一种数据结构(V,E),由

  • 顶点V的集合
  • 边缘E的集合,表示为有序的顶点对(u,v)
a graph contains vertices that are like points and edges that connect the points
顶点和边缘

在图中,

V = {0, 1, 2, 3}
E = {(0,1), (0,2), (0,3), (1,2)}
G = {V, E}

图术语

  • 邻接 :一个顶点被认为是相邻的另一个顶点是否有连接它们的边缘。顶点2和3不相邻,因为它们之间没有边。
  • 路径 :一系列允许您从顶点A到达顶点B的边称为路径。 0-1、1-2和0-2是从顶点0到顶点2的路径。
  • 有向图 :其中边(u,v)不一定意味着也有边(v,u)的图。该图中的边缘由箭头表示,以显示边缘的方向。

图表示

图通常以两种方式表示:

1.邻接矩阵

邻接矩阵是V x V顶点的2D数组。每行和每列代表一个顶点。

如果任何元素a[i][j]值为1,则表示存在连接顶点i和顶点j的边。

我们上面创建的图的邻接矩阵是

graph adjacency matrix for sample graph shows that the value of matrix element is 1 for the row and column that have an edge and 0 for row and column that don't have an edge
图邻接矩阵

由于它是无向图,因此对于边(0,2),我们还需要标记边(2,0);使邻接矩阵关于对角线对称。

在邻接矩阵表示中,边缘查找(检查顶点A和顶点B之间是否存在边缘)非常快,但是我们必须为所有顶点之间的每个可能链接保留空间(V x V),因此需要更多空间。

2.邻接表

邻接表将图表示为链接列表的数组。

数组的索引表示一个顶点,其链接列表中的每个元素表示与该顶点形成边的其他顶点。

我们在第一个示例中创建的图的邻接列表如下:

adjacency list representation represents graph as array of linked lists where index represents the vertex and each element in linked list represents the edges connected to that vertex
邻接表表示

邻接表在存储方面非常有效,因为我们只需要存储边的值即可。对于具有数百万个顶点的图,这可能意味着节省了很多空间。


图操作

最常见的图形操作是:

  • 检查图中是否存在该元素
  • 图遍历
  • 向图添加元素(顶点,边)
  • 寻找从一个顶点到另一个顶点的路径