图由一组顶点(表示为V )和一组边(表示为E )组成。
The graph is denoted by G(E, V).
图的组成部分
- 顶点:顶点是图的基本单位。有时,顶点也称为顶点或节点。每个节点/顶点都可以标记或未标记。
- 边:边是绘制或用于连接图形的两个节点。它可以是有向图中的有序节点对。边可以以任何可能的方式连接任何两个节点。没有规则。有时,边也称为弧。每条边都可以标记/未标记。
图表类型
-
空图
如果图中没有边,则图称为空图。
-
平凡图
只有一个顶点的图,它是可能的最小图。
-
无向图
边没有任何方向的图。也就是说,在每条边的定义中,节点都是无序对。
-
有向图
边有方向的图。也就是说,节点在每条边的定义中都是有序对的。
-
连通图
我们可以从一个节点访问图中的任何其他节点的图称为连通图。
-
断开连接图
其中至少一个节点无法从一个节点到达的图称为断开连接图。
-
正则图
图中每个顶点的度数都等于图的其他顶点的度数。
令每个顶点的度数为K,则该图称为K-regular 。 -
完整图
从每个节点到每个其他节点都有一条边的图。
-
循环图
图本身就是一个圈的图,每个顶点的度数为2。
-
循环图
包含至少一个循环的图称为循环图。
-
有向无环图
不包含任何循环的有向图。
-
二分图
一个图,其中的顶点可以分为两组,使得每组中的顶点在它们之间不包含任何边。
树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 现场工作专业课程和学生竞争性编程现场课程。