许多现实世界的问题可以使用图算法来解决。图对于建模和解决现实问题很有用。例如,找到两个城市之间的最少航班数量的问题可以使用图来建模,其中顶点代表城市,边代表两个相邻城市之间的航班,如下图所示。求最小联程航班数的问题
两个城市之间的问题简化为寻找图中两个顶点之间的最短路径。
图问题的研究被称为图论。图论由 Leonhard Euler 于 1736 年创立,当时他引入图术语来解决著名的柯尼斯堡七桥问题。普鲁士柯尼斯堡市(现俄罗斯加里宁格勒)被普雷格尔河分开。河上有两个岛屿。城市和岛屿由七座桥梁连接,如下图(a)所示。问题是,一个人可以步行,每座桥只过一次,然后回到起点吗?欧拉证明这是不可能的。
为了建立证明,欧拉首先通过消除所有街道来抽象柯尼斯堡城市地图,生成如上图 (a) 所示的草图。接下来,他将每个陆地块替换为一个点,称为顶点或节点,并将每座桥替换为一条线,称为边,如图所示上图(b)。这种具有顶点和边的结构称为 图.
看图,我们问是否存在一条从任意顶点出发,恰好遍历所有边一次,并返回到起始顶点的路径。欧拉证明,要存在这样的路径,每个顶点必须具有偶数条边。因此,柯尼斯堡七桥问题无解。
图问题通常使用算法来解决。图算法在计算机科学、数学、生物学、工程学、经济学、遗传学和社会科学等各个领域都有许多应用。
图由顶点和连接顶点的边组成。本章不假设您具备任何图论或离散数学的先验知识。我们使用简单明了的术语来定义图表。
什么是图表?图是一种数学结构,表示现实世界中实体之间的关系。例如,上图代表城市之间的航班,下图(b)代表陆地之间的桥梁。
图由一组非空顶点(也称为节点或点)和一组连接顶点的边组成。为了方便起见,我们将图定义为 G = (V, E),其中 V 表示一组顶点,E 表示一组边。例如下图中的V和E如下:
V = {"西雅图", "旧金山", "洛杉矶",
“丹佛”、“堪萨斯城”、“芝加哥”、“波士顿”、“纽约”、
“亚特兰大”、“迈阿密”、“达拉斯”、“休斯顿”};
E = {{"西雅图", "旧金山"},{"西雅图", "芝加哥"},
{“西雅图”,“丹佛”},{“旧金山”,“丹佛”},
...
};
图可以是有向的,也可以是无向的。在有向图中,每条边都有一个方向,这表明您可以通过边从一个顶点移动到另一个顶点。您可以使用有向图来建模父/子关系,其中从顶点 A 到 B 的边表示 A 是 B 的父项。下图 (a) 显示了有向图。
在无向图中,您可以在顶点之间双向移动。下图是无向图。
边可以加权也可以不加权。例如,您可以为上图中图表中的每条边分配一个权重,以指示两个城市之间的飞行时间。
图中的两个顶点被称为相邻如果它们由同一条边连接。类似地,如果两条边连接到同一顶点,则称它们是相邻。图中连接两个顶点的边被称为与两个顶点关联。顶点的度是与其相关的边的数量。
两个顶点如果相邻,则称为邻居。类似地,如果两条边相邻,则称为 邻居。
A 循环是将顶点链接到自身的边。如果两个顶点由两条或多条边连接,这些边称为平行边。 简单图是没有任何环或平行边的图。在完全图中,每两对顶点都是相连的,如下图(b)所示。
如果图中任意两个顶点之间存在路径,则该图是连通的。图G的子图是一个图,其顶点集是G的子集,边集是G的子集。例如,上图(c)中的图是上图(b)中的子图。
假设该图是连通且无向的。 循环是一条从某个顶点开始并在同一顶点结束的闭合路径。如果连通图没有环,则它是树。图G的生成树是G的连通子图,并且该子图是包含G中所有顶点的树。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3