了解数据结构中的图

    在本教程中,您将学习什么是图。此外,您还将找到图的表示形式。
    图数据结构是节点的集合,这些节点有数据并连接到其他节点。
    让我们通过一个例子来理解这一点。在facebook上,所有事物都是一个节点。包括用户、照片、相册、事件、组、页面、评论、故事、视频、链接、注释……任何有数据的事物都是一个节点。
    每个关系都是从一个节点到另一个节点的联结。无论你发布一张照片,加入一个小组,喜爱一个页面等等,都会为这些节点创建新的联结。
在这里插入图片描述
    节点之间的联结画到纸面就成了边,facebook的一切都是这些节点和边的集合。这是因为facebook使用图数据结构来存储数据。
    更准确地说,图是一种(V,E)数据结构,由下面元素组成:

  • 顶点的集合V
  • 边的集合E,表示为有序的顶点对(u,v)
    在这里插入图片描述
        在图中,
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也是从顶点0到顶点2的路径。
  • 一个图有边(u,v)不一定意味着也有边(v,u)。图中的边用箭头表示,表示边的方向。
图的表示

    图通常以两种方式表示:

  1. 邻接矩阵
        邻接矩阵是V x V顶点的二维数组。每行和每列代表一个顶点。
        如果元素 a[i][j] 的值为1,则表示存在连接顶点 i 和顶点 j 的边。
        我们上面创建的图的邻接矩阵是:
    在这里插入图片描述
        由于它是一个无向图,对于边(0,2),我们还需要标记边(2,0),使邻接矩阵关于对角线对称。
        在邻接矩阵表示中,边查找(检查顶点A和顶点B之间是否存在边)非常快,但是我们必须为所有顶点之间的每个可能链接保留空间(V x V),因此它需要更多空间。
  2. 邻接表
        邻接表将图表示为链接列表的数组。
        数组的索引表示一个顶点,其链表中的每个元素表示与该顶点形成边的其他顶点。
        我们在第一个示例中创建的图的邻接列表如下:
    在这里插入图片描述
        邻接列表在存储方面非常有效,因为我们只需要存储边的值。对于具有数百万顶点的图,这意味着节省了大量的空间。
图操作

    最常见的图形操作是:

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

[1]Parewa Labs Pvt. Ltd.Graph Data Stucture[EB/OL].https://www.programiz.com/dsa/graph,2020-01-01.

猜你喜欢

转载自blog.csdn.net/zsx0728/article/details/114572148
今日推荐