形式陈述
给定连通有限无向带权图 ,Prim 算法选择任意根 ,维护已纳入顶点集 与树边集 。初始化 ,令 、其他顶点键为 。每次取尚未纳入且键最小的顶点 ,若 就把记录的边 加入 ;随后令 进入 ,并用每条 ()更新
当 非空时, 正是外部顶点 与 相连的最轻单边权重;全局最小键因此对应割 的一条轻边。
正确性不变量是 包含于某棵最小生成树公理库最小生成树Minimum spanning tree · MST连通加权图中总边权最小的生成树及其算法问题。。设下一条边 跨当前割,取一棵包含 的 MST 。若 ,把 加入 会形成圈,圈上另有一条边 跨同一割。由 是割上轻边,;以 替换 仍是 MST 且包含新的 。归纳到 条边即得最优生成树,这就是本算法的贪心公理库贪心算法Greedy algorithm每一步作局部最优且不回溯选择的算法设计范式。证书。
键由最小优先队列公理库优先队列Priority queue · Priority queue ADT按键的优先次序反复访问并移除当前最小元素的抽象数据类型。维护。设 、,权重比较为单位成本:
- 邻接表加带句柄二叉堆执行 次
extract-min、至多 次边检查和 次有效 decrease-key,最坏时间 ;连通图中可简写为 ,辅助空间 ;
- 惰性插入新键而不做
decrease-key 时,堆可含 条记录,时间为 、空间为 ;
- Fibonacci 堆公理库Fibonacci 堆Fibonacci heap以延迟合并和级联切断取得常数摊还插入、合并与减键的可并优先队列。给出 摊还时间;
- 邻接矩阵配合长度为 的键数组,每轮线性寻找最小键,总时间 、辅助空间 (不计矩阵)。
直觉
Prim 只生长一个连通块。外部顶点的键不表示它离根有多远;它记录“现在把该点接入树的最便宜单边”。每次接入后,只有新顶点的邻边可能改善其他键,因此无需反复扫描整个割。
它与 Dijkstra 都可写成“取最小键、扫描邻边”,但两个键的代数含义不同。Dijkstra 用 累加路径成本;Prim 只比较单边 。相同的数据结构外观不能替代各自的最短路定型证明与 MST 割交换证明。
Prim 算法前沿示意图
例子与边界
设边及权重为
从 开始,先以边 、键 接入 ;扫描 后把 的键由 降为 、把 设为 。接着取 及边 ,再把 降为 ;最后取 及边 。树边权为 。若误把键更新成从 累加的距离, 会取路径成本 ,算法状态已经变成最短路而非 MST。
相等权边可能给出多棵 MST,起点与平局规则只改变具体输出,不改变最小总权。负权边会优先接入,但不破坏割性质。平行边应分别比较,外部顶点只保留其中当前最轻的一条及其边 ID;自环永远不跨割,应忽略。
单次 Prim 只能覆盖根所在连通分量。若优先队列最小键变为 ,说明当前分量已结束;从一个未纳入顶点重启并把它的键置零,可得到整张非连通图的最小生成森林。实现若使用惰性堆记录,弹出后必须检查顶点是否已纳入以及键是否仍为当前值。
推论与应用
图表示公理库图的表示Graph representation · Adjacency-list and adjacency-matrix representations依据图的类型与所需操作选择邻接表、邻接矩阵或边集表示的方法。决定 Prim 能否只扫描真实邻边。稠密显式图中, 矩阵实现常比指针堆简单;稀疏图通常使用邻接表与堆。在欧氏完全图等隐式稠密输入中,边并未全部列出,几何候选结构可以避免物化 条边,但那是利用额外度量结构的专门算法。
Kruskal 算法公理库Kruskal 算法Kruskal's algorithm按边权递增加入不成环边并用并查集维护连通分量的最小生成树算法。从许多单点分量出发,按全局边序逐渐合并;Prim 始终只有一棵活动树。Borůvka 算法公理库Borůvka 算法Boruvka algorithm每轮为每个连通分量并行选择最轻出边并收缩,构造最小生成森林。又让所有分量并行选择出边。三者共享割性质,但 Prim 的键更新、Kruskal 的排序和 Borůvka 的轮收缩不能互换复杂度结论。
参考资料
- Robert C. Prim, “Shortest Connection Networks and Some Generalizations,” Bell System Technical Journal 36(6), 1957, pp. 1389–1401。
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,§21.2。
- Jon Kleinberg and Éva Tardos, Algorithm Design, Pearson, 2005,§4.5。