最小生成树:在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通图的最小生成树。
Kruskal算法基本思想:首先按照边的权值进行从小到大排序,每次从剩余的边中选择权值较小的且边的两个顶点不在同一个集合内的边(就是不会产生回路),加入到生成树中,直到加入了n-1条边为止。
判断两个顶点是否已连通可以利用深度优先或广度优先搜索,但是效率低,可以采用并查集来解决。
Kruskal算法中,对边进行快速排序的复杂度是$O(E\log{E})$,在E条边中找出V-1条边的复杂度是$O(E\log{V})$,所以Kruskal算法的复杂度是$O(E\log{(E+V)})$。通常边数E大于顶点数V,最终时间复杂度为$O(E\log{E})$。
|
|