The question is: given an edge-weighted graph, find a spanning tree with the smallest sum of edge weights. (This is somewhat similar to the problem solved millions of times a day by Internet routers, the Single-Source Shortest-Path Spanning Tree, to be discussed later.) We approach solution algorithm(s) by presenting a greedy coloring algorithm with the following meaning of colors: the originally uncolored edges can be colored blue or red, blue indicating the proposed tree edges, red indicating the proposed non-tree edges. We need to maintain a "color invariant":
at any point, there is a MWST containing all the blue edges and none of the red edges.
All the algorithms in the text are different implementations of the following abstract greedy "coloring algorithm":
while there are uncolored edges do {apply Red or Blue coloring rule}
A cut is defined as a set of edges that separates (disconnects) two sets of vertices. "reddish" means "without blue edges"; obviously, no cut can have all red edges if the color invariant holds true. "blueish" means "without red edges"; similarly, no cycle can have all blue edges, so if there is a reddish cut or bluiesh cycle, then they have an uncolored edge and one of the rules can be applied.
It is only a little harder to show that any uncolored edge, say (x,y), must be in a reddish cut or a blueish cycle. Assume that both x and y have incident blue edges; then either there is a blueish path from x to y that avoids (x,y) (and therefore (x,y) closes a blueish cycle), or every such path is broken by a red edge (and there is a reddish cut that includes (x,y).) Edges incident to a vertex with no incident blue edge form a reddish cut.
Proving that application of either rule preserves the coloring invariant is not too difficult, either -- let us assume it, for the time being. Then the correctness proof is easy: The invariant is obviously true initially, when all the edges are uncolored. Since the application of any of the two rules maintains the invariant, when the while loop terminates and all edges are colored, we have a spanning tree of blue edges on the background of red non-tree edges. That the loop terminates is witnessed by the termination function defined by the number of uncolored edges minus 1: every execution of the body of the loop decreases it by one. When it dips below 0, we are done.
How to find a reddish cut or a blueish cycle is left to the implementors -- and will be presented next week.