持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天
图的搜索
什么是图
1.离散数学中的图
计算机科学或离散数学中说的“图”是下面这样的
上图中的圆圈叫作“顶点”(也叫“结点”),连接顶点的线叫作“边”。也就是说,由顶点和连接每对顶点的边所构成的图形就是图。
2.图可以表现各种关系
图可以表现社会中的各种关系,使用起来非常方便。
假设我们要开一个派对,将参加人员作为顶点,把互相认识的人用边连接,就能用图来表现参加人员之间的人际关系了。
再举个例子,若将车站作为顶点,将相邻两站用边连接,就能用图来表现地铁的路线了。
另外,还可以在计算机网络中把路由器作为顶点,将相互连接的两个路由器用边连接,这样就能用图来表现网络的连接关系了。
3.加权图
上面讲到的都是由顶点和边构成的图,而我们还可以给边加上一个值。
这个值叫作边的“权重”或者“权”,加了权的图被称为“加权图”。没有权的边只能表示两个顶点的连接状态,而有权的边就可以表示顶点之间的“连接程度”。
这个“程度”是什么意思呢?根据图的内容不同,“程度”表示的意思也不同。比如在计算机网络中,给两台路由器之间的边加上传输数据所需要的时间,这张图就能表示网络之间的通信时间了。
而在路线图中,如果把地铁在两个车站间行驶的时间加在边上,这张图就能表现整个路线的移动时间:如果把两个车站间的票价加在边上,就能表现乘车费了。
4.有向图
当我们想在路线图中表示该路线只能单向行驶时,就可以给边加上箭头,而这样的图就叫作“有向图”。比如网页里的链接也是有方向性的,用有向图来表示就会很方便。
与此相对,边上没有箭头的图便是“无向图”。
右图中我们可以从顶点A到顶点B,但不能直接从B到A,而B和C之间有两条边分别指向两个方向,因此可以双向移动。
和无向图一样,有向图的边也可以加上权重。
在上图中,从顶点B到顶点C的权重为5,而从C到B的权重为7。如果做的是一个表示移动时间的图,而从B到C是下坡路,就有可能出现这样的情况。就像这样,使用有向图还可以设置非对称的权重。
5.图能带来的便利
假设图中有两个顶点s和t,而我们设计出了一种算法,可以找到“从s到1的权重之和最小”的那条路径。
那么,这种算法就可以应用到这些问题上:寻找计算机网络中通信时间最短的路径,寻找路线图中耗时最短的路径,寻找路线图中最省乘车费的路径等。
就像这样,只要能用图来表示这些关系,我们就可以用解决图问题的算法来解决这些看似不一样的问题。
本章的知识点
本章将要学习的是图的搜索算法,和可以解决图的基本问题——最短路径问题的算法。
图的搜索指的就是从图的某一顶点开始,通过边到达不同的顶点,最终找到目标顶点的过程。根据搜索的顺序不同,图的搜索算法可分为“广度优先搜索”和“深度优先搜索”这两种。
最短路径问题和前文提到的一样,就是要在从s到t的路径中,找到一条所经过的边的权重总和最小的路径。