概念
连通图:在无向图中,若任意两个顶点
v
i
v_i
vi与
v
j
v_j
vj都有路径相通,则称该无向图为连通图。
强连通图:在有向图中,若任意两个顶点
v
i
v_i
vi与
v
j
v_j
vj都有路径相通,则称该有向图为强连通图。
连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。
生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。
最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。
思想及关键词
基于贪心的思想,排序,并查集查连通分量
流程及伪码
1 图有n个节点,准备好图的所有带权边后,按权升序排边;
2 初始化根节点表:每个节点的根节点为其自己;
3 遍历边,如果边上的两个节点不为父子关系,则提取边至res数组,并在根节点表上连接两节点;
4 遍历结束条件为 遍历完所有边/提取到了n-1条边
时间复杂度
Kruskal算法每次要从都要从剩余的边中选取一个最小的边。通常我们要先对边按权值从小到大排序,这一步的时间复杂度为为O(eloge)。Kruskal算法的实现通常使用并查集,来快速判断两个顶点是否属于同一个集合。最坏的情况可能要枚举完所有的边,此时要循环|E|次,所以这一步的时间复杂度为O(eα(V)),其中α为Ackermann函数,其增长非常慢,我们可以视为常数。所以Kruskal算法的时间复杂度为O(eloge)。