📜  图简介

📅  最后修改于: 2021-10-25 04:43:34             🧑  作者: Mango

图由一组顶点(表示为V )和一组边(表示为E )组成。

图的组成部分

  1. 顶点:顶点是图的基本单位。有时,顶点也称为顶点或节点。每个节点/顶点都可以标记或未标记。
  2. 边:边是绘制或用于连接图形的两个节点。它可以是有向图中的有序节点对。边可以以任何可能的方式连接任何两个节点。没有规则。有时,边也称为弧。每条边都可以标记/未标记。

图表类型

  1. 空图

    如果图中没有边,则图称为空图。

  2. 平凡图

    只有一个顶点的图,它是可能的最小图。

  3. 无向图

    边没有任何方向的图。也就是说,在每条边的定义中,节点都是无序对。

  4. 有向图

    边有方向的图。也就是说,节点在每条边的定义中都是有序对的。

  5. 连通图

    我们可以从一个节点访问图中的任何其他节点的图称为连通图。

  6. 断开连接图

    其中至少一个节点无法从一个节点到达的图称为断开连接图。

  7. 正则图

    图中每个顶点的度数都等于图的其他顶点的度数。
    令每个顶点的度数为K,则该图称为K-regular

  8. 完整图

    从每个节点到每个其他节点都有一条边的图。

  9. 循环图

    图本身就是一个圈的图,每个顶点的度数为2。

  10. 循环图

    包含至少一个循环的图称为循环图。

  11. 有向无环图

    不包含任何循环的有向图。

  12. 二分图

    一个图,其中的顶点可以分为两组,使得每组中的顶点在它们之间不包含任何边。

树v/s图

树是受限制的图类型,只是有更多规则。每棵树总是一个图,但不是所有的图都是树。
链表、树和堆都是图的特例。

图的表示

图有两种存储方式:

  • 邻接矩阵
  • 邻接表

邻接矩阵

在这种方法中,图形以二维矩阵的形式存储,其中行和列表示顶点。
矩阵中的每个条目表示这些顶点之间的边的权重。

邻接表

该图表示为链接列表的集合。
有一个指针数组指向连接到该顶点的边。

他们之间的比较

当图包含大量边时,最好将其存储为矩阵,因为矩阵中只有一些条目是空的。
使用诸如 Prim 和 Dijkstra 邻接矩阵之类的算法来降低复杂性。

Action Adjacency Matrix Adjacency List
Adding Edge O(1) O(1)
Removing and edge O(1) O(N)
Initializing O(N*N) O(N)

解决问题的步骤

  • 将问题识别为图形问题。
  • 找到解决问题的算法
  • 设计数据结构和算法来实现图形解决方案。
  • 编码它!

图的基本操作

下面是对图形的基本操作:

  • 在图中插入节点/边 – 在图中插入一个节点。
  • 删除图中的节点/边——从图中删除一个节点。
  • Searching on Graphs – 在图中搜索实体。
  • Traversal of Graphs – 遍历图中的所有节点。

图表的使用

  • 地图可以使用图形表示,然后计算机可以使用它来提供各种服务,例如两个城市之间的最短路径。
  • 当各种任务相互依赖时,这种情况可以使用有向无环图表示,我们可以使用拓扑排序找到任务执行的顺序。
  • 状态转换图表示从当前状态开始的合法移动。在井字游戏中可以使用。
  • 杀人面试!

图在现实生活中的应用

更多图表资源:

  • 最近关于图的文章
  • 图上的练习题
  • 图上的算法

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。