Prime算法与克鲁斯卡尔算法是图生成最小生成树,前者从节点出发,后者从边出发。
1.Prime算法
Prime算法的核心步骤是:在带权连通图中V是包含所有顶点的集合, U已经在最小生成树中的节点,从图中任意某一顶点v开始,此时集合U={v},重复执行下述操作:在所有u∈U,w∈V-U的边(u,w)∈E中找到一条权值最小的边,将(u,w)这条边加入到已找到边的集合,并且将点w加入到集合U中,当U=V时,就找到了这颗最小生成树。
|
|
U |
E |
|
|
U{A} |
E{} |
|
|
U{A,F} |
E{ (A,F) } |
|
|
U{A,F,E} |
E{ (A,F) (F,E)} |
|
|
U{A,F,E,D} |
E{ (A,F) (F,E) (F,D)} |
|
|
U{A,F,E,D,B} |
E{ (A,F) (F,E) (F,D) (F,B)} |
|
|
U{A,F,E,D,B,C} |
E{ (A,F) (F,E) (F,D) (F,B) (F,C) } |
|
|
U{A,F,E,D,B,C} |
E{ (A,F) (F,E) (F,D) (F,B) (F,C) } |
克鲁斯卡尔算法
克鲁斯卡尔算法的基本思想是以边为主导地位。在带权连通图中,U是所有边构成的集合,N是顶点数量,设SU是已经在最小生成树上的边构成的集合。重复执行下述操作:每次选择一条权值最小的边e∈U-SU,且与SU中边不构成环的边,加入到SU中。当SU中边数量等于N-1时,就找到了最下生成树。
|
|
US |
Count(US) |
|
|
US{(E,F) } |
1 |
|
|
US{(E,F) (F,D) } |
2 |
|
|
US{(E,F) (F,D) (F,C) } |
3 |
|
|
US{(E,F) (F,D) (F,C) (F,B) } |
4 |
|
|
US{(E,F) (F,D) (F,C) (F,B) (F,A)} |
5 |