最小生成树和最短路径

这篇算作是《算法》第四版部分读后感吧

我思考这个问题的开始就是纠结最小生成树prim算法和最短路径dijkstra算法的异同

1.最小生成树prim算法
直接从例子开始吧,我们考虑一副这样的图
这里写图片描述

1.将D设为起始点(设置某个点为起始点是随机的),考虑与它相邻节点的权重值,图中黄色节点,也就是D-A,D-B,D-E,D-F
这里写图片描述
2.选取权重值最小的D-A将其连接,图中蓝色的代表已经加入到生成树中,接着考虑与D和A相邻的节点B,E,F,也就是考虑A-B,D-B,D-E,D-F的权重值
这里写图片描述
3.我们选择了最小的D-F将其连接,接着考虑与D,A,F相邻的节点B,E,G,也就是考虑A-B,D-B,D-E,F-E,F-G的权重值
这里写图片描述
4.选择最短的A-B将其连接
5…….
6……
以此类推,大家可以试着自己手画一下
最后的结果应该是这样
这里写图片描述
由prim算法生成的最小生成树如图中蓝色线段连起来的路径

补充一点这里我觉得这样可能好理解一点,以第二步中的图为例
这里写图片描述
将蓝色的节点和蓝色的线看做一个整体,也就是你可以把他们看做是一个大节点,再去观察有哪些节点与这个大节点相连,接着再去找最小的权重值


2.最短路径dijkstra算法
这里不同于最小生成树的是,最小生成树是要找到最小的边可以把所有的节点都连接起来,而最短路径是要指定起点,然后求起点到各个节点的最小值,比如我们要求起点D到各个节点的最短路径
求D到其余各个节点的距离结果如下
这里写图片描述


总结 最小生成树和最短路径的目的本来就不是一样的,最小生成树是要找到最小的边可以把所有的节点都连接起来,而最短路径是要求某个节点到其余节点的最短的路径。