1. 最小生成树定义
树是指没有环路的图,生成树就是指一个图上面删除一些边,使它没有环路。
最小生成树就是指生成树中边权之和最小的那一种。
上图的最小生成树就是这样:
2. Prim 算法
2.1. 算法流程
就以上图为例:
- 先选择一个起始点,我们就以A为例。
- 创建一个集合S,用来存储已经在树中间的点。开始时集合那只有点A,即 S = { A } S = \{A\} S={ A}。
- 选择一个连通到集合S中一个点的最小边,其中它的另一个端点不在集合S中。以保证,最小生成树不会形成环。把这条边的不在S集合中的端点加到S集合中。(目前选边AB, S = { A , B } S = \{ A, B\} S={ A,B})
- 重复步骤三,直到所有的点都在S集合中了。
- 答案就是刚才所选的边的边权和啦。
时间复杂度: O ( n m + m ) O(nm+m) O(nm