32、图算法:最小生成树与最短路径

图算法:最小生成树与最短路径

1. 最小生成树概述

想象一块木板上有许多钉子,它们通过绳子相互连接。假设沿着一条或多条绳子可以从任意一个钉子到达其他钉子,现在有一个游戏,目标是移除一些绳子,使得所有钉子仍然保持连接,同时使用的绳子总长度最短。这就是最小生成树的概念。

形式上,对于一个无向加权图 $G = (V, E)$,最小生成树是 $E$ 中边的集合 $T$,它以最小的成本连接 $V$ 中的所有顶点。$T$ 中的边构成一棵树,因为除了作为树的根的第一个顶点外,每个顶点在生成过程中都恰好有一个前置顶点作为其父节点。

1.1 Prim 算法

Prim 算法是计算最小生成树的一种方法。它通过一次添加一条边来逐步构建最小生成树,每次选择当前看起来最优的边。由于这种选择方式,Prim 算法属于贪心算法(虽然贪心算法通常只能得到近似解,但 Prim 算法能得到最优结果)。

1.1.1 算法基本原理

该算法反复选择一个顶点,并探索与该顶点相连的边,以确定是否有更有效的方式来连接到目前为止已经探索过的顶点。它类似于广度优先搜索,因为在深入图之前,它会先探索一个顶点的所有相连边。

为了在每一步确定要选择的顶点,我们为每个顶点维护一个颜色和一个键值。初始时,所有顶点的颜色设为白色,键值设为一个任意大的值(大于图中任何边的权重),而开始生成的顶点的键值设为 0。随着算法的进行,除了起始顶点外,所有顶点都会在最小生成树中被分配一个父节点。只有当一个顶点被染成黑色时,它才成为最小生成树的一部分,在此之前,它的父节点可能会发生变化。

1.1.2 算法步骤
  1. 从图中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值