教学方

Tim Roughgarden

Professor

脚本

Alright. So now that we've completed our warm up by showing that at the very least, Prim's algorithm outputs a spanning tree. Let's move on and actually show it outputs a minimum cost spanning tree. And to prove this theorem, we're going to have to tackle head-on the kind of crisis which you always face when designing a greedy algorithm. So in a greedy algorithm, you're making an irrevocable decision, like in Prim's algorithm, we're including an edge in our tree and never revisiting it later. And, how can you be sure that you're not making a mistake? How can you have a guarantee that the decision you're making seemingly myopically right now is actually a good decision won't come back to bite you later? So it turns out for minimum spanning trees, there is a beautiful condition which tells you when you're guaranteed to not regret including an edge into a spanning tree, but guarantees when an edge has to belong to the minimum spanning tree. So that's called the cut property, it's the subject of the next slide. So this is a cool enough property that we're going to bestow it not just with all caps but even with a box. Now, that's a pretty good property. So what does it states? Well, consider an edge of a graph, an edge that we are wondering if it's safe to include it in the tree so far. So here is this sufficient condition guaranteeing that you won't regret including this edge in the tree so far. The condition is stated in terms of the cut. So suppose you can find a cut, A, B with the property that amongst all edges in the graph G, that happened across this cut, the edge E is the cheapest edge crossing this cut. Okay? So not only should edge E cross this cut, A, B, but it should cheapest such edge. If this condition is met, then we definitely want them include the edge E in our solution. Indeed, the edge E has to be a member of any minimum spanning tree of the graph. So in this video, we're going to assume that the cut property is true. It is by no means obvious. It definitely requires a proof. I'll give you the proof in a separate video. It's not, it's a little bit tricky. It's based on a subtle exchange argument. For this video, we're going to assume that it's true, however, and we just want to be quiet, so that we want to figure out what it's good for. Now, I will soon show you that it actually implies correctness of Prim's algorithm. But just to get a feel for it, let's look at a much simpler graph. Let's just look at a four cycle. Four nodes, four edges with edge costs 1, 2, 3, and 4. So let's look at, let's look at a few cuts. So, let's look at the cut. We're on one side of the cut, I put the upper right vertex, and on the other side of the cut, I put the other three vertices. So there are two edges crossing this cut, the edge that has cost 1, the edge that has cost 2. So the edge with cost 1 is the cheapest edge crossing this cut, so by the cut property, the edge of cost 1 has to be in the MST. Okay. So we looked at one cut and both the cut property [INAUDIBLE} to stick in the MST. That was pretty cool. let's look another cut. Let's look at a cut where on one side, we just put the bottom right vertex, and on the other side, we put all Now this cut has two edges crossing it the edges that have cost 2 and cost 3. The edge of cost 2 is the cheapest edge crossing this cut. So by the cut property, it has to be in the MST. So that's cool. So we know the two has got to be there. Now let me point out something interesting that's happened, which is that, it is not the case that this edge of cost 2 is the cheapest crossing, every single cut that it crosses. Remember when we looked at cut number 1, this edge of cost 2 was actually the most expensive edge crossing that cut. But, we found a different cut that is the cheapest crossing and that's enough to justify the cut property. So in other words, all that's important for the cut property, I just got to find you one cut for which an edge is the cheapest, that's enough to conclude its presence in the MST. So similarly, we can look at a third cut just consisting of the bottom left vertext and the other three vertices. And it's the same story, there are two edges crossing this cut, the edge of cost 3, the edge of cost 4. The edge of cost 3 is the cheapest edge crossing this cut, so we know it's got to be in the MST. And again, when we look at cut number 2, it didn't tell us whether or not the edge of cost 3 is in the MST, but when we looked at cut number 3, that was enough to conclude that the edge of cost 3 has to be in the MST. So there we go. So we could use the cut property that construct an entire MST. On the other hand, there's no way to use the cut property to try to justify the edge of cost 4. Any cut that you pick for which the edge of cost 4 crosses, there will be some other cheaper edge crossing it. So you can never use the cut property as one would hope to justify the inclusion of the edge of cost 4 and you'd better not be able to, because 4 is not in the MST. Now a quick side note, some of you might be wondering when I wrote in the conclusion of the cut property, I said the MST of G, so that would seem to indicate that the minimum spanning tree is unique. So that deserves a quick comment. so first of all, if the edge costs are not distinct, if you have ties between edges, then you can certainly have multiple different minimum spanning trees and you have to state the cut property a little bit differently. But again, in the lectures we are just going to assume distinct edge costs, so that's not a problem. And in fact, something that will be a consequence of the next slide, we'll notice that the minimum spanning tree is unique with distinct edge cost. It's not obvious, but we'll prove it shortly. All right. So what I want to do to finish up this video is I want to assume that the cut property is true. And then, from that, I want to derive, I want to argue that Prim's algorithm is correct, always outputs an MST. The proof of the cut property is non-trivial and deserves its own video, which you can see separately. All right. So given the tools that we've developed, this argument is actually going to be quite short. So let's assume that the cut property is a true statement and let's begin by building on the previous video. The previous video argued that Prim's algorithm outputs a spanning tree, didn't argue it was a minimum one, but it argued it's a spanning tree, it spans all the vertices and has no cycles. Let's call the output of Prim's algorithm at the end of algorithm T star. Now, stare at the cut property, stare at the pseudocode of Prim's algorithm. What happens in each iteration of Prim's algorithm? Well, we have our set capital X, that's what we spanned so far. There's the rest of this stuff, V - X, so that's a cut X, V - X. What does Prim choose to include next? Well, in brute-force searches through the edges, the cross is cut and it adds the cheapest one of them. Well, that is right in the wheelhouse of the cut property. What does the cut property says? It says cheapest edges crossing cuts have to be in the MST. So they just fit together beautifully. Prim's algorithm explicitly picks an edge at each iteration which satisfies the hypothesis of the cut property and therefore has to be in the MST. So remember, the conclusion of the cut property says edges so justified must belong to the MST. So if everything in T star is justified by the cut property, then everything in T star is in the MST so T star is a subset of the MST. But T star, of course, as we have argued, is already a spanning tree in it of itself. And, if you add more edges to T star, it's no longer going to be a spanning tree, because you are going to pick up cycles, right? If you ever have something that is connected, there is a path from each pair of vertices, and you add a new edge, you are going to close a path, you're going to get a loop. Okay? So T star is already a spanning tree, and you can't have anything bigger and still be a spanning tree. So therefore, this has to be the minimum spanning tree, there cannot be anything else. So for this reason, T star must in fact be the minimum cost spanning tree of the graph. Since the input graph was arbitrary, assuming only it was connected, this completes, assuming the cut property, the proof of correctness of Prim's minimum spanning tree algortihm.