字幕表 動画を再生する 英語字幕をプリント The following content is provided under a Creative Commons license. Your support will help MIT OpenCourseWare continue to offer high quality educational resources for free. To make a donation or view additional materials from hundreds of MIT courses, visit MIT OpenCourseWare at ocw.mit.edu. PROFESSOR: So welcome to this week. We're going to talk about trees mainly. We're going to talk about some very special ones, spanning trees. But before we do this, you will go through a whole bunch of definitions and look at examples to explain how it works. So let's talk about walks and paths. So you've already seen a bit of graph theory. We've talked about graph colorings and so on. But now we're going to talk about special types of graphs, and special structures within such graphs. Well, let's start with the first definition. How do we define a walk? Well, a walk is something very simple. You walk from one vertex in the graph over an edge to a next vertex, to a next vertex, and so on. So how do we define this? A walk is a sequence of vertices that are connected by edges. So for example, we may have something that looks like a first vertex. That we call the start. And an edge that goes to a second vertex. We continue like this until the end, say, at vk, which we call the end of the walk. And if you look at this, we say this is a walk from v0 all the way to vk. It has exactly k edges. And we say that the length is actually equal to k. So this is a very basic notion. And what we are really interested in is actually paths. And paths are special types of walks in which all those vertices are actually different from one another. But let's first give an example of a graph that you will study throughout the whole lecture, especially when we come to spanning trees. So let's have a look at the following graph. So let this be a graph. And for example, we can have a walk that goes from this particular edge. Say we call this v0. It goes over this edge over here. Suppose I want to end over here. Well, I can go many ways in this particular one. I can go for this edge. I may go over here. I may go all the way to this part over here. I may return if I want to. And I finally, I take this edge for example back to-- over this edge, I will end in the last vertex vk. So what we notice here is that we have a walk that actually gets to this particular vertex, and then returns to this vertex. So for a few other edges, and then goes all the way to vk. So if you talk about the path, then we really want all the difference vertices not to occur twice. So let's define this so the destination is that a path is actually a walk. Is a walk where all edges, where all vertices, vi's, are different. In this particular case-- well for example, if you strip off this part over here, you will get a path from v0 to here, to here, to here. And all these vertices on the path on this walk are different. And therefore it is a path. This also shows us something. It is possible to construct from a walk a path. As you can see, we started off with this particular walk. And we just deleted, essentially, a part where we sort of came back to the same vertex again. And when we delete all those kinds of parts, you will end up with a path. So can we formalize this a little bit better? Then we get the next lemma. I call this lemma one. And let's see whether we can prove this. So we want to show that if there exists a walk from, say, a vertex u to-- well, maybe I should not use arrows. That's confusing-- from u to v. Then there also exists a path from u to v. So how can we prove this? Do you have any ideas? So what kind of proof techniques can we use here? And maybe one of the principles that we have seen? AUDIENCE: [INAUDIBLE] but I have an idea about how you could show this. It's basically if you visit one vertex-- let's you go 1, 2, 3, 4, 5, 3, 6. You can walk from 1 to 6. Then we just take out the 4, you just go 1, 2, 3, 6. PROFESSOR: Right. So what did we do there? We essentially had a walk. And then we cut out a smaller parts here that recurs in a sense. And we have shortened the path, we have shortened the walk to a smaller path. So what we've used here is we can sort of take out parts of the walk just like we did over here until the walk gets shorter, and shorter, and shorter. So maybe one of the things that we may consider is a walk of shortest length. And we know that this is possible. Oops, sorry about that. So let's prove this. So for example, suppose there exists such a walk from u to v. Then we know by the ordering principle that there exists a walk of minimum length. So that's what we're going to use here. And then we're going to essentially go in the same direction as what you were talking about because we're going to show that it's not possible to delete anything more. Because otherwise, if you could do that, the walk would get shorter. And that's not possible, because by the well ordering principle, we simply consider that there exists a walk of minimal length that we are interested in. We will show that this particular walk is actually going to be a path. So let's see how we can do this. So let's do walk be equal to-- well, it starts in v0. It's equal to u. There's an edge to, say, v1. It goes all the way up to vk, which is the last vertex, v. So what are we going to prove? We're going to prove that this is actually a path. And since this is a walk of minimal length, well suppose it is not a path. So we are going to use contradiction. Well if it's not a path, then by our definitions over here, there must be two vertices that are actually the same, just like in here. So we go from v0 to, say, this particular vertex, or this one. And then we come back to this one, and then all the way to vk. So if it is not a path, then two of those must be equal to one another. And then we are going to use this trick. We're going to take out this part. We get the shorter walk. But that contradicts that our walk is minimal length. So that's sort of the proof technique that we're doing. OK. Let's do this. So first, let's consider a few cases. If k equals 0, then that's pretty obvious. We have only a single vertex u that is connected by a 0 length path to itself. So this is fine. For k equals 1, we have just a single edge. And then we're done too. That's a path as well. So let's consider the case where k is at least two. Well, suppose it's a walk. It's not a path. So we are going to assume the opposite. If it's not a path, then we concluded that two of those vi's must be equal to one another. So there exits an i unequal to j such that vertex vi equals vj. Ah, but now we have a walk that goes from v0 all the way to, say, vi, which is equal to vj. And then we go all the way up to vk which is equal to v. So essentially, we have created a shorter walk. We have taken out this little triangle over here. Now this is a shorter walk. And this contradicts our assumption of minimality. So that means that our assumption over here is not true. So the walk is actually a path. So this concludes the proof. So even though this lemma is pretty straightforward in the sense that we all feel that if you have a walk, then you can create a path, if you really want to write it down with all the principles that we have been taught, you can see a few things appearing here. So we first started with the well ordering principle. And also we used the method of contradiction in our proof. So let's set talk about the next definition. So we talked about walks and paths. Let's talk about connectivity. We actually defined two vertices, u and v to be connected if there is a path that connects u to v. So u and v are connected if there is a path from u to v. And now we can talk about the graphs that are connected. That's a very important concept. A graph is connected if every pair of vertices is connected. So when every pair of vertices in the graph are connected. So an example is the particular graph on the blackboard. You can see here that there's always a path to be found from this vertex, to this one, or to that one, to this. to that, to this, or that. You can do this for any two vertices. So this is a connected graph. A graph that is not connected looks something like this for example. You may have a single edge plus, say, another triangle, maybe with another edge or something like that. So they are disconnected from this vertex. I do not have a graph that connects to this vertex over here. So this is about connectivity. And now we can start talking about cycles and closed walks. Together, these concepts will help us to define trees. And then we can start talking about this very special concept, spanning trees. So let's see how that works. So cycles and closed walks. We first define a closed walk. And once we have done this, we are able to get into cycles. So what's a closed walk? Well, it's actually a walk for which the start and the end vertex are the same. So it starts and ends at exactly the same vertex. So this is all pretty straightforward. So we have v0 connected to, say, v1, all the way up to vk. And vk itself is equal to v0. So you have a walk that goes all the way from v0 all the way back to vk. For example, in this graph, you could have walked all the way back to v0. You would have a closed walk. So what's a cycle? A cycle is a little bit more special in which all these vertices over here are actually different from one another. So if k is at least three-- so the walk is not just a simple edge, or just a single vertex. And if all v0, v1, all the way up to vk minus 1 are different, then we are saying that we have a cycle. Then it is called a cycle. So these two concepts, connectivity and cycles, will help us to define trees. So what are trees? A simple example is something that looks like this, for example. The idea is that a tree is both connected. And it has no cycles. So in this case, we can see that every vertex it's connected to every other vertex. But there is no cycle like a triangle or something that is connected all around. So let's define this properly. A definition is that a connected and acyclic graph is called a tree. And within trees, we also have something very special that we call leaves. And leaves are exactly those nodes that have degree one. So for example, this node has degree one. It has only this edge connected to it. So this is called a leaf. This one also is a leaf because it has just one edge connected to it. But this lead over here has three edges. So it has degree three. This one has degree four. This is the leaf again. This one is a leaf, this one, and this one. So this is very important concept. We often use leaves in our proofs. And we will get to one. So a lead is a node with degree one in a tree. OK great. So now let's have a look at trees. Suppose I'm looking at a subgraph of a tree. What can we say about a subgraph? What kind of structure does this have? So suppose for example I want to take some connected subgraphs. So that's what I'm actually interested in. So for example, I take this-- suppose I take this connected subgraph. Then what does it look like? Do we see some structure in this? It's-- no? AUDIENCE: It's a tree. PROFESSOR: Yeah, it's a three. So are we able to prove this also? So this lemma you actually lose later on. So any connected subgraph of the tree is a tree. And to prove-- well, how can we start out a proof? Any suggestions? So let's have a look here. So how may I think about this? Well, I may take a connected subgraph, and I want to show-- of a tree- and I want show that it is a tree. A general method could be, for example, to-- AUDIENCE: [INAUDIBLE] You know, one of the things, one of the conditions is it has to be acyclical. So since you're not adding nodes and you're not starting within cycles, you can't create a new cycle. PROFESSOR: Yeah. I think you're saying something like, if I have a connected subgraph, which is like a smaller part of the tree-- now suppose that would not be a tree. Say it would have a cycle. Then that cycle would also be present in the tree itself. And that's not really possible because a tree has no cycles. So that's sort of indeed how the proof goes. So we essentially use contradiction. So let's suppose that this connected subgraph is actually not a tree. So suppose it's a connected subgraph. It's not a tree. Well then, in that case, it must have a cycle, because a tree is something that is both connected and has a cycle and is acyclic. We have a connected subgraph, which is not a tree. So it must have a cycle. So it has a cycle. But now since it is a subgraph of the bigger graph, we know that the cycle must also be in the whole graph. So the whole graph has this particular cycle. Wait a minute. The whole graph is the tree. And a tree's acyclic. So we get a contradiction. So that means that our original assumption that it's not a tree is wrong. So it is a tree. So this is, again, such a general kind of proof method that we repeatedly use here. So this lemma, which we will call two, we will use in the next proof where we're going to talk about the relationship between vertices and edges within trees. It's a very beautiful relationship. The lemma states if you have a tree that has n vertices, then it must have n minus 1 edges. So this is a very tight relationship here. So a tree with n vertices has n minus 1 edges. So let's see. How can we prove this one? Any suggestions? So what did we use at the beginning of the course here? So we have n vertices. And we want to show that it has n minus 1 edges. We can use induction, right? So let's use induction. on n. So how do we proceed if you do this? Well, we always start out with an induction hypothesis. So the statement here would be something like, well, there are n minus 1 edges in any n vertex tree. And if you start with induction, you always start with the base case, right? So we have the base case. So how does this work? So for example, we want to consider P1. So there are zero edges in any one vertex tree. Well, that's true, right? If I have just one vertex, there's no edge. So this is definitely correct. So that's easy. So let's prove the other part, which is the inductive step. And the inductive step is-- So to do the inductive step, we are going to always assume Pn. And then we want to prove Pn plus 1. So let's do this. So we have the inductive step. And we always start out the same way. So we suppose P of n. And now we want to prove Pn plus 1. So how do we do this? Well, take a tree that has n plus 1 vertices vertices. And we want to show that it has n edges. So take any such tree. So let T be a tree that has n plus 1 vertices. So how can we use the induction hypothesis here? So do you have any ideas over here? So I have a tree with n plus 1 vertices. And if I want to be able to use this induction at this induction hypothesis, then I can only apply it on trees that have n vertices. So somehow I have to delete one vertex. Right? So what kind of vertex can I delete in such a way that we still have a tree? And I need that because this induction step can only be applied to trees. So what type of vertex can I remove from a tree and it still stays a tree? So for example, if you look at this example up here, what kind of vertex can I remove here? AUDIENCE: A leaf. PROFESSOR: Yeah, except. I can remove a leaf-- for example, this one. And why is that? Because if there's only one edge connected to the rest of the tree-- so if I delete it, I will actually keep a tree. So that's how the proof will continue. So we take out one vertex. So let v be a leaf of the tree. And let's remove this particular vertex. So what do we get? Well, we again have a connected subgraph. So this creates a connected subgraph. And we also know that this is a tree. So how can we conclude that? Well, we had another lemma somewhere that's behind this blackboard. It says that if you have connected subgraph, then we still have a tree. So this is great. So this is also a tree. So now we can apply Pn because we have n vertices, because we deleted one. So by Pn, we can conclude that this particular subgraph has n minus 1 edges. You simply apply our statement over here. But we want to say something about the original tree. So how do we do this? Well, we have to somehow reconstruct this tree. Well, we have deleted v. So we have to reattach v again. So let's do this. So we reattach v. And if I do this, well, let's look at this example over here. I reattach the leaf. I will add one more edge. So if I reattach this particular leaf, I will get back the original T over here. And how many edges does it have? Well, it has these n minus 1 edges plus the one edge that is needed to reattach the leaf. So that's all together exactly n edges. So now we have shown that for every n plus 1 vertex tree, every such tree has n edges. So now we're done, because this shows P n plus 1. So this is how the lemma is proved. And in the homework, you actually use this. So let's now talk about very special trees, spanning trees. I think this is a very exciting topic. So let's look at this particular graph over here. Let's define spanning trees. So what's a spanning tree? A spanning tree is a subgraph of a graph that somehow spans all the vertices within this graph. So it's a tree that touches every single vertex. So for example, we may have-- Maybe this is not such a bright color. Maybe this one. So for example, we may have a tree that looks like this. So in this particular graph, we can create a subgraph with the thickened green edges over here, which is a tree, and also covers all the different vertices of the original graph. This is actually pretty amazing that you can do this, you can actually create such a kind of tree. And what you want to prove, first of all, is that for every connected graph, we can construct such a spanning tree. So let's first define this. And then we will prove this theorem. And then after this, we're going to talk about weighted graphs. That will lead to minimum weight spanning trees. And then it gets really interesting because you want to figure out how we can actually construct those for any graph. So let's define a spanning tree. A spanning tree-- And we appreciate this as SD-- of a connected graph is actually a subgraph that is a tree. So that's the first condition. And it also covers all the other vertices. So it has the same vertices as the graph. And over here, we have this example. So now what you want to show is the following theorem that any connected graph actually has such a spanning tree. So the theorem is every connected graph has a spanning tree. And let's think about a proof together. So for example, we may start with the idea to use a contradiction. Suppose there exists a connected graph that has no spanning tree. So how would we go ahead? So how can we prove that we have a contradiction here? So the proof that we're going to propose here is by contradiction. That means that we're going to assume the opposite. So assume that we have a connected graph, a connected graph G. That has no spanning tree. So how can we use this? How could this be strange? Or what can we do here? So one of the nice things about trees over here is-- so that maybe gives us some insight is that if we have a tree-- well, it seems like such a kind of spanning tree is like-- It's a solution to a subgraph that is connected with a minimum number of edges. Like if I have any other type of subgraph-- for example, if it has cycles, I can always remove an edge of course. So we know a subgraph of G that touches all the different edges and has a cycle can get shortened by eliminating one edge of a cycle that's within such as a subgraph. So maybe we have an idea here. And maybe we can use this. So maybe we can say, let's set consider a graph T. So let T be a connected subgraph of G, but with a property that it has a minimum number of edges. So let this be a connected subgraph of G. And we assume that it has the same vertices of G of course. In addition, it has the smallest number of edges possible. So what do we know? Well, let's look at our assumption here. We said that a connected graph, G-- that's what we consider here-- for which there is no spanning tree. So what do we know? We know that this particular T over here can definitely not be a spanning tree, because that's what we assume here. Can we use this? So let's think about this. So if it is not a spanning tree, then what must it have? So we already know that T is a connected subgraph of G with the same vertices of G. So the only difference between a spanning tree and T is that the spanning tree is a tree, and T is not a tree. So therefor, T must have a cycle. So we use our assumption over here. We know that T is not a spanning tree. And now we can conclude that it must have a cycle. So now we can start thinking about this cycle. And let's feel-- What can we do here? So we constructed T as the subgraph that has the minimum number of edges possible. So now if you have a cycle, the whole idea is that we're going to delete one of the edges of the cycle. And if you do that, we will be able to construct a smaller subgraph T, essentially, with a smaller number of edges. And that contradicts this particular statement over here. So that's sort of how we go ahead. So if it has a cycle, let's write it out. For example, here we have a cycle like this. Well, let's prove that if we remove one of the cycle, that we still have a connected subgraph. So the whole graph T is much bigger, right? It has lots of connections and so on. Suppose we will remove this particular edge over here. So we remove this one. Do we still have a connected subgraph of G that covers all the vertices of G? Well, of course it cover all the vertices of G because we only removed an edge over here. So that's fine. All these parts are still connected to the rest. If you can show that it is connected, then well we just-- well, we removed one edge. So we actually created this smaller graph. And then we get contradiction. And then we're done with our proof. So let's see whether we can prove that if we remove this particular edge over here, that we still have a connected subgraph. So how can we do this? Well, let's take-- so the first case would be if a vertex x is connected to y. So I want to take any pair x, y of vertices. And suppose that the path that connects x and y does not contain this particular edge e that I remove here. So suppose this does not contain e. So I look at the graph T. I Know T is connected. So I take a pair of vertices x and y. I know there is a path between x and y in T. If this path does not contain the edge e, then I know that the same path still exists in the same graph where I've removed this particular edge. So that's great, right? I have shown that x and y are still connected in the new graph where I've removed this e. So now let's look at another case. For example, x is over here. And it is connected all the way through here over this particular edge all the way to, say, y over here. So this is case number two. Well, are x ad y still connected? Yes they are, right? Because I have removed e from a cycle. So I can still go into the other direction of the cycle and connect back towards y. So what we see here is that x can go all the way to here. But it can still go over the cycle back to here, and then to y. So we are still connected. So this shows that in both of the cases, for any pair of vertices, even after removal of e, the graph T minus this edge e is still connected. So let's write this out. So all vertices in G are still connected after removing e from T. So now we are done. So what was that again? We now constructed a smaller graph-- smaller in the sense that it has one less edge-- that is still connected, and with the same vertices as G. But I assumed that T was already the smallest such graph, such subgraph. So we have a contradiction. So what does this mean? This means that our original assumption that we have over here cannot be true because we started off with this assumption. Because of this, we could start to construct this. And then you could derive this whole argumentation. And in the end, we get a contradiction. So our original assumption is wrong. So actually, this is not possible. There does not exist a connected graph G that has no ST. So the theorem is true. So this is an important theorem. So now we can start talking about weighted minimum spanning trees. So let's use this picture over here and assign some weights to this graph. So for example, we have 1, 2, 2, 3, 3, 3, a 1 over here, another 1, 1, 4, and 7. And let's construct a spanning tree. So let me give an example over here. Actually, this is an example that we have right her in the thick lines in green. So what is the weight of the spanning tree that we have here? So we simply add the weights of all the edges. So we have 7, 3. That makes 10. 11, 14, another 2, 16, 17, 18, 19. So the weight of this particular spanning tree is 19. So now the problem is-- and that's the rest of the lecture-- how can you construct a minimum weight spanning tree, one that has the minimum weight possible? So we see another example. So could I swap some edges around or something like that such that I can get a lesser weight? So for example, over here, I have-- for example, this node over here is connected by an edge that has weight 3. But I could also have connected it to this particular one over here, which is only weight 1. If I do this, I actually improve the spanning tree construction. So I will get something that looks like-- Let's see-- that looks like this. And now we replaced 3 by 1. So it gets 17. So can we do anything less than this? That's maybe-- it's still a tree, right? Because there's no cycle. Here we have this, this, this, this part over here. If you want to have connected subgraph, I always need the 7 in here. Well, it seems like you cannot really replace anything by something cheaper. Like any edge in here seems to be pretty necessary. Of course, what I could do is I could create other minimum spanning trees. So actually it turns out that 17 is the minimum weight. For example, I could, instead of this edge, I could use this edge. That's another solution. Or instead of this edge, I could use this edge. So how do we construct such a minimum weight spanning tree? Can we somehow find an algorithm that creates this? And that's the big problem of today. So let me write out one spanning tree that I will use for the rest of this class. And maybe I will use a little bit different color. Let's use red over here. I hope this is visible. So we have red, this one, and this one, and this one, and this one, and this one. That's going to be-- this is going to be the spanning tree that I'm going to look at. This is also weight 17. So let's first define what a minimum weight spanning tree is, just to be very precise. And then let's have an algorithm. Maybe you have already ideas of how this could be done. It turns out actually that if you just start with a greedy approach, you just start to add sort of through the edges of minimum weight, that you can still add without creating any cycles. You will get an algorithm that is going to do the trick for you. So that's kind of surprising. So let's talk about the definition. So the minimum spanning tree of an edge weighted graph is defined as-- It's defined as the spanning tree of G such that it has the smallest possible sum of edge weights. Well the algorithm that I'm thinking about here is very straightforward. Actually I'll use this blackboard because this algorithm will be the focus of the rest of the lecture. So what's the algorithm? We actually grow a subgraph step by step. So one edge at a time such that at each step we want to add the minimum weight edge that keeps the subgraph acyclic. So this is our algorithm. Let's have a look how this works in this particular graph over here. So suppose I would start off with-- well, if I start with this algorithm. I take, say, any minimum weight edge. Say I take this particular one. So this could be my first edge that I choose. Then I may want to choose another minimum weight edge such that I do not create a cycle. Well, which one could I choose? I could choose this one. I could also choose this one. With this one, I could choose this part. With this one, I could choose that part. I could also choose this one. So let's choose this one actually. This would be our second step and our second edge that we select in our algorithm. There are two disjoint edges. So there's definitely no graph. Well, maybe now our third step, I can choose one of these edges, which also has just weight 1, which is minimum weight. So this could be my third possibility. Then what's the fourth possibility? Well, I have to choose one of those actually. I cannot choose this weight 1 edge? Why not? Because that would create a cycle. So I'm not allowed to choose this one anymore. So I choose one of these two. So for example, I choose this one over here. This is the fourth edge that I add to the whole picture. So note that in the meantime. I have two disconnected components. One other here, which is this arc, and another arc over here. So which edge do I attach now in the algorithm? Well, I can still add this minimum weight edge over here of weight two, because it does not create any cycle. So this would be the fifth wonder that I add to the whole picture. Well, now I can choose either one of those. So for example, this would be my sixth step. And then finally, I can choose none of these because those would create cycles. But I can choose this one. So this is going to be the seventh one that I add to the whole graph that I construct here and grow in this algorithm. It turns out that this algorithm actually creates for you a minimum spanning tree. And the proof is much more complex than what you have seen before. So that's what we're going to do right now. So when we think about this algorithm, then somehow I want to guarantee that at every single step, I will be able to grow into a minimum spanning tree. And that's the basic intuition that we have. And that's the lemma that we want to prove first. So formalizing, we get the following. We want to prove the following statement. So the lemma that will help us is let S be the set of edges that I have been selecting up to now in the algorithm. So let S consist, for example, of the first m edges. What we want to show is that we can still extend this set of edges into a minimum spanning tree. We can still grow within the algorithm into a minimum spanning tree. That is what you want to show. So we want to show that their exists a minimum spanning tree T that has the vertex set V and an edge set E. So this is the minimum spanning tree for the graph G such that S is actually a subset of the edges in this minimum spanning tree. So this is a nice mathematical formulation that really precisely states that we can still keep on growing into a minimum spanning tree. So how would this lemma help us in proving the theorem that we want to show? Actually, where is the theorem? I did not write down the theorem so far. I can put this over here. So the theorem that's want to show is that for any connected weighted graph G, the algorithm creates a minimum spanning tree. The algorithm produces a minimum spanning tree. So how can we prove his theorem? Suppose we know that this lemma is true, which we will prove later. Then how do we know that this theorem holds? Actually, I'm wiping out this particular theorem over here. We will use this in a moment. So we know that every connected graph has a spanning tree. We already know that. But now we want to show that we can even construct a minimum spanning tree for a weighted graph. So how are we going ahead? The proof of the theorem is as follows. I will suppose that the number of edges-- the number of vertices-- is actually equal to n. And if we want to show that we get to a minimum spanning tree, we want to first of all show that the algorithm is able to choose at least n minus 1 edges, right? Because a tree has n minus 1 edges. We have shown this before. The algorithm should not get stuck. So let's first prove that. So suppose I have chosen less than n minus 1 edges. So suppose we have less than n minus 1 edges picked. Well then what do we know? Well, there exists as edge in E minus S-- well, let me first write it out-- that can be added without creating a cycle. So why is this? Well, I know that E is the edge set of my minimum spanning tree. I know that S is a part of-- is a subset of all the edges. I know that a minimum spanning tree is a tree. It's a tree on n vertices. We know that's a tree on n vertices has n minus 1 edges. I know that less than n minus 1 edges have been chosen so far. So that means that S has less than n minus 1 edges. E has successfully n minus 1 edges. So there's at least one edge that is contained, that it is an element in E, but not in S. And for that particular edge-- well, since it's part of this tree, together with S, which is also part of all the edges within the tree-- well, we know that that edge, for that reason, will not create a cycle. Because otherwise, the original would have a cycle. So we know that the algorithm can always select an edge such that's no cycle is created. And that means that we can keep on going in the algorithm until at least n minus 1 edges are selected. So what happens if we have n minus 1 edges? So once n minus 1 edges have been chosen, well, then S has exactly n minus 1 edges. E has exactly n minus 1 edges, because it's a tree. They are subsets of one another. So they must be equal to one another. So essentially what we have here is that S exactly defines the minimum spanning tree that we are looking for. So the algorithm at the very end, when it has chosen n minus 1 edges, produces a minimum spanning tree. So we know that S defines the edges of a minimum weight spanning tree. So if this lemma really holds true, then this theorem can be shown. So now let's have a look at this lemma. And we're going to use that picture over there to see how we can prove this. So this is a little bit tricky. And the way to go about this is actually to use induction. So let's check see whether we can do this together. So the proof of the lemma is as follows. We want to use induction. On what do you think we are going to induct here? Well, we want to prove this particular lemma, and we have this particular variable m. So that seems to be a good methods to continue. So we'll use induction on m. Let's state the induction hypothesis. Well, it's exactly the same as in the lemma. So we say for all G and for all sets S that consists of the first m selected edges, there exists a minimum spanning tree of G such that S is a subset of E. So this is how induction hypothesis. And as always, we start with the base case. And the base case is going to be pretty straightforward in this particular case. We have to do a little bit of work for it. So let's see how that works. So the base case is m equals 0. So let's reread this statement where m is equal to 0. Well, if we have zero selected edges, then S is the empty set. So I have to prove that for all G, there exists a minimum spanning tree such that the empty set is a subset of E. Well, the empty set is always a subset of E, right? So that's no problem. So what I need to proof is that for all G, there exists a minimum spanning tree of G. And this is where our previous theorem comes in, because we showed that for all graphs G, there exists a spanning tree. And if there exists a spanning tree, there exists a minimum weight spanning tree. So that's the base case. So m equals 0 implies that S is equal to the empty set. So that means that S is definitely a subset for any set of edges of a minimum weight spanning tree. And now we're going to use our theorem to show that there also exists a minimum spanning tree. So this in itself is not yet sufficient, right? You see that. I know that if S is the empty set, then I know that this always holds. But the statement is a little bit bigger. For all G, I still need to prove there exists a minimum spanning tree. And that's what our previous theorem told us. So we'll now write that part out. So we have to base case. Let's see. I think I will go and prove this over here. So let's look at the-- That's the inductive step. And then hopefully we can play a little bit with this picture up here to get some insight. So how do we do this? Well, with an inductive step, we start as usual. We assume that P of m holds. Now how do we go ahead? So I want to prove Pm plus 1, which is stated over here. So I want to consider the set S that consists of the first n plus 1 selected edges. So well, essentially what I'm interested in is what happens in the n plus 1 step. So let E denote the edge that I added in the m plus 1 step. And let S be the first m selected edges. And we know that we can apply p of m for S, right? Because we assume this is our inductive step. So we can apply something for S. We would like to show Pm plus 1. So we would like to show something for the union of those two. So let me repeat that. Let S denote the first m selected edges. So by our induction hypothesis, we can-- well, let's apply it. We know that there exists a minimum spanning tree such that S is a subset of the edges. So let's just pick one such minimum spanning tree. So let T star be such a minimum spanning tree. It has edges E star. And we know that S is actually a subset of E star. Let's look at the very first case. So what are the kind of cases that we are interested in? So let's think again. What do we need to prove? We need to prove Pn plus 1. So we need to prove something about the union of S and E. We want to show that there is a minimum spanning tree such that the edge set of this minimum spanning tree contains both S and also E. So what kind of cases can we handle here? Well, what will be a really good first case? The first case could be that E is actually already part of E star. Well, if that's true, then of course, S together with E is also a subset of E star. And that means that we are done, in this particular case. And why is this? Because this is an example of a minimum spanning tree that contains both S and E. So it contains the n plus 1 first selected edges. And so this is Pn plus 1. Now the next case is the difficult part. OK, let's wipe out-- actually, we do not really need the proof of the theorem anymore. So let's take this off the blackboard. So the way to do this is to sort of see how we can use the tree, T star, and somehow transform it into another tree for this particular case where we assume that E is not in E star. So let's have a look at that graph up there. Let me rewrite it a little bit. And let's look at what happens in the algorithm after two steps. So I will redraw the graph. So we have, say, these edges. This one-- let me see. I want to use some different colors to make this as clear as possible. We have this one. We have this one. We have this one. And we also have this one actually. Sorry. All right, so let's define the different edges. The straight ones from the set S. So after two steps over there, we have selected this edge first, and then this edge was the second edge that we selected in our algorithm. So these two together form the set S. So what is T star? T star could be, for example, the spanning tree that contains both these edges plus the dotted ones. So let's have a look here. This is indeed a tree, right? And if we look into this picture over here, you can see that the weight of this particular tree is 17. It's also a minimum weight spanning tree. What is G? G is the complete graph and contains not only these two types of edges, but also these sort of more orange colored ones. So this is so the situation that we are in. Now in our algorithm, we want to choose this particular third edge. So this is going to be our e, this particular edge. And as you can see, e is not part of T star. It's not one of those two kinds of edges. It's actually one of the orange edges. So what can we do here? Well, the idea is that we want to recreate like a you tree in which we somehow exchange e-- exchange one of the edges in T star with e, and still sort of maintaining the minimum spanning tree property. So how can you prove this? The way to do this is to figure out what the algorithm teaches us about e, and also what the tree property tells us. So let's combine all our knowledge. So first of all, we know that the algorithm, from its definition, implies that as together with e, actually has no cycle. That's how we select the n plus 1 edge. There's no-- all selected edged together should not contain a cycle. That's the definition of the algorithm. We know that T star is a tree. And this implies that if you look at the graph that has the edges, has the vertices V together with E star with edge e, then this must contain a cycle. Now this property I will not prove right now, but it is pretty straightforward. It's a one line proof actually in the book. So you can look it up. So it simply states that if you have a tree, if you add another edge, an edge that is not contained in E star, then we will create a cycle. So now we can combine these two statements together and conclude that, well, if S with e has no cycle, but E star with e has a cycle, and S is contained in E star, well there's only one possibility. And that is that this cycle must have an edge, e prime, that is in E star minus S. Because if it would not have such an edge, then all the edges of the cycle must be located in S-- in S together with E. But S together with E has no cycle. So that's not possible. So this cycle must have and edge e prime that is outside S, but still in E star. So we can find one over here. e prime can be this particular edge. So e prime is in E star. But it is not already selected in S. So now we are going to do a trick. The idea is to swap e and e prime. So that's the main idea. So let's first write down what we know about the weight of e prime and e. So since the algorithm, well, could have selected e or e prime-- it did select e, right? But it could have also selected e prime, because e prime does not create a cycle with S. That's what we have seen here. So this really implies therefore that the weight of e is at most the weight of e prime. So why is this? Because the algorithm always chooses the minimum weight. And it can choose between e or e prime, but it chose e. So the weight of e must be less than the weight of e prime. So that's what we know also. So now let's swap e and e prime in T. And then we're almost done with this proof, because that will be the tree of which we will prove that it is a minimum spanning tree. So the key idea is to swap e and e prime in T. How do we do it? Well, let T double star be equal to V with the edge set E double star where E double star is really equal to, well, the original set E star. But we take out of this e prime. So this one is taken out of the minimum spanning tree. And we add e in here. Now we want to prove that this particular T double star is a minimum spanning tree that fits our lemma. So what do we know? We know that T double star is acyclic. And why is this? Well, we actually removed e prime from the only cycle-- so look up here also-- the only cycle in E star together with e. So it's acyclic. T double star is also connected. And why is that? Well, since e prime is removed-- but it was on a cycle. So it remains connected. And finally, we also know that T double star actually contains all the vertices in G. So all these three together with prove that T double star is a spanning tree of G, because it's acyclic, connected, contains all the vertices. Is it a minimum weight spanning tree? Now we are really almost done, because-- let me write it out here. We know that the weight of T double star is at most the weight of T star. Why is this? Well, we showed just now that the weight of e is at most the weight of e prime. So we have exchanged e and e prime. So that means that the weight of T double star is at most that of the weight of T star. We also know that T star is a minimum spanning tree. So if you combine these two together, then we know that the weight of T double star cannot get less than the minimum weight possibility. So it also has a minimum weight. So T double star is a minimum spanning tree. So now we're done because in this case, we have constructed a T double star such that S together with E is a subset of E double star. And that means that we have shown that our induction step is true. We have shown that Pn plus 1 holds. So now we finally have figured out that the lemma is true. And now we showed already how to use the lemma in our proof for this particular theorem. So this is the end of this lecture. And tomorrow, you will actually go again over this proof because it's rather complex. And then hopefully you really get into all the different proof techniques. OK. Thank you.
A2 初級 米 Lec 8|MIT 6.042J コンピュータサイエンスのための数学 2010年秋学期 (Lec 8 | MIT 6.042J Mathematics for Computer Science, Fall 2010) 50 10 Dou Lin に公開 2021 年 01 月 14 日 シェア シェア 保存 報告 動画の中の単語