1 00:00:03,280 --> 00:00:04,740 PROFESSOR: All right, so lecture 11 2 00:00:04,740 --> 00:00:09,200 was about generic rigidity of linkages. 3 00:00:09,200 --> 00:00:14,400 So we've got bars and vertices connected together in a graph. 4 00:00:14,400 --> 00:00:16,870 And generically, the graph is all that matters. 5 00:00:16,870 --> 00:00:20,150 And we characterize in two ways, Henneberg construction 6 00:00:20,150 --> 00:00:25,027 and Laman when graphs are generically rigid. 7 00:00:25,027 --> 00:00:27,110 And in particular, there was this pebble algorithm 8 00:00:27,110 --> 00:00:29,110 that was supposed to tell you in polynomial time 9 00:00:29,110 --> 00:00:31,510 whether you're a graph was Laman or not. 10 00:00:31,510 --> 00:00:35,266 And everyone pretty much asked about this, about the details, 11 00:00:35,266 --> 00:00:37,140 including myself when I watched it like, huh, 12 00:00:37,140 --> 00:00:38,870 that seems a little sketchy. 13 00:00:38,870 --> 00:00:40,620 So I thought I'd spend most of today going 14 00:00:40,620 --> 00:00:43,630 through how that algorithm works exactly 15 00:00:43,630 --> 00:00:47,580 and also why it's correct, which is definitely not obviously. 16 00:00:47,580 --> 00:00:54,030 It vaguely feels correct, but we'll see why it actually is. 17 00:00:54,030 --> 00:01:02,170 Remember Laman's Theorem, Laman characterization 18 00:01:02,170 --> 00:01:11,400 is that your graph is generically rigid if and only 19 00:01:11,400 --> 00:01:27,090 if every subgraph-- let's say every k vertices induces 20 00:01:27,090 --> 00:01:28,760 at most to 2k minus 3 edges. 21 00:01:32,580 --> 00:01:33,700 That's part one. 22 00:01:33,700 --> 00:01:35,400 And you also need that the number 23 00:01:35,400 --> 00:01:42,840 of edges overall in the graph is 2n minus 3 24 00:01:42,840 --> 00:01:45,575 where n is the total number vertices. 25 00:01:45,575 --> 00:01:47,450 So this was just the degree of freedom count. 26 00:01:47,450 --> 00:01:51,110 You have 2n degrees of freedom for every vertex minus 3 27 00:01:51,110 --> 00:01:54,140 for the rigid motions, two translations, one rotation. 28 00:01:54,140 --> 00:01:56,990 So that's the number of edges you should have total. 29 00:01:56,990 --> 00:01:57,490 Sorry. 30 00:01:57,490 --> 00:01:59,156 This is for minimally generically rigid. 31 00:02:02,280 --> 00:02:05,710 And then to make it balance, you want 32 00:02:05,710 --> 00:02:08,800 to guarantee that every k vertices doesn't 33 00:02:08,800 --> 00:02:09,765 have too many edges. 34 00:02:09,765 --> 00:02:11,140 Because if it has too many edges, 35 00:02:11,140 --> 00:02:12,740 there'd be too few somewhere else. 36 00:02:12,740 --> 00:02:14,614 This part would be overbrace, some other part 37 00:02:14,614 --> 00:02:16,590 would be underbrace, and you'd be flexible. 38 00:02:16,590 --> 00:02:19,180 That's the intuition. 39 00:02:19,180 --> 00:02:21,560 And so the tricky part comes down 40 00:02:21,560 --> 00:02:25,690 to how do you check whether every k vertices induces 41 00:02:25,690 --> 00:02:28,950 2k minus 3 edges because they're exponentially many choices. 42 00:02:28,950 --> 00:02:32,457 There's 2 to the n different choices of subsets or vertices. 43 00:02:32,457 --> 00:02:34,040 For each of them, you'd have to check. 44 00:02:34,040 --> 00:02:35,290 That's no good. 45 00:02:35,290 --> 00:02:37,000 So the algorithm wants to check this. 46 00:02:37,000 --> 00:02:39,050 And I'm going to call this property 47 00:02:39,050 --> 00:02:40,925 the 2k minus 3 property. 48 00:02:44,110 --> 00:02:46,560 And we're going to warm up with a simpler problem, which 49 00:02:46,560 --> 00:02:51,810 is to check to the 2k property without the minus 3. 50 00:02:51,810 --> 00:03:02,610 So 2k property is just every k vertices 51 00:03:02,610 --> 00:03:08,200 induce at most 2k edges. 52 00:03:11,050 --> 00:03:12,990 So this'll be a little easier to think about, 53 00:03:12,990 --> 00:03:17,014 more or less the same, a lot easier to argue about. 54 00:03:17,014 --> 00:03:18,930 And then we'll see how to modify the algorithm 55 00:03:18,930 --> 00:03:21,840 to check the 2k minus 3 property. 56 00:03:21,840 --> 00:03:26,170 Was the property clear and in particular inducing? 57 00:03:26,170 --> 00:03:30,450 Inducing means that you have some set of vertices, 58 00:03:30,450 --> 00:03:33,310 and there's the rest of the vertices, n minus k of them. 59 00:03:33,310 --> 00:03:37,200 You only look at edges where both endpoints are in the set, 60 00:03:37,200 --> 00:03:39,750 both of them are among the k vertices. 61 00:03:39,750 --> 00:03:45,531 So you ignore vertices that have one end in k and the other end 62 00:03:45,531 --> 00:03:46,030 outside. 63 00:03:46,030 --> 00:03:49,670 And you ignore, obviously, edges that have both ends outside. 64 00:03:49,670 --> 00:03:50,660 Just count these guys. 65 00:03:54,000 --> 00:03:57,010 So how do we do this? 66 00:03:57,010 --> 00:03:58,310 Give you the algorithm. 67 00:03:58,310 --> 00:04:02,000 Actually, let me first give you the idea of the algorithm 68 00:04:02,000 --> 00:04:04,840 before we go to the actual algorithm. 69 00:04:04,840 --> 00:04:07,680 And this is review, but pretty soon we'll 70 00:04:07,680 --> 00:04:10,055 get to stuff that wasn't covered in lecture. 71 00:04:24,280 --> 00:04:33,501 So the idea is every vertex has two pebbles inside of it. 72 00:04:33,501 --> 00:04:37,300 I'll draw as two red dots. 73 00:04:37,300 --> 00:04:41,924 And they can cover incident edges. 74 00:04:41,924 --> 00:04:43,090 So they can't move very far. 75 00:04:43,090 --> 00:04:45,600 They have to stay basically on the inside 76 00:04:45,600 --> 00:04:47,260 or on the boundary of the vertex. 77 00:04:47,260 --> 00:04:49,560 That's how I'm going to draw it. 78 00:04:49,560 --> 00:05:03,245 Each pebble can cover one incident edge. 79 00:05:08,910 --> 00:05:12,605 So for example, there's a little graph. 80 00:05:16,680 --> 00:05:18,976 I could take-- let's maybe I leave 81 00:05:18,976 --> 00:05:20,350 one of the pebbles in the middle. 82 00:05:20,350 --> 00:05:24,120 I can move one of the pebbles to cover one of the edges. 83 00:05:24,120 --> 00:05:25,870 So I'll put it this intersection to denote 84 00:05:25,870 --> 00:05:29,000 it's covering this edge, but it still belongs to this vertex. 85 00:05:29,000 --> 00:05:30,460 Pebbles cannot change vertices. 86 00:05:30,460 --> 00:05:32,970 They have to stay local. 87 00:05:32,970 --> 00:05:35,860 These two pebbles could just stay where they are. 88 00:05:35,860 --> 00:05:37,740 Here, we could put one pebble here, 89 00:05:37,740 --> 00:05:41,334 another pebble there, one pebble here, one pebble here. 90 00:05:41,334 --> 00:05:43,000 This is what I call a pebble cover cause 91 00:05:43,000 --> 00:05:46,750 every edge is covered by some pebble. 92 00:05:46,750 --> 00:05:54,710 That's the goal in a pebble cover is to cover every edge. 93 00:05:57,950 --> 00:05:59,125 You need to cover it once. 94 00:06:04,270 --> 00:06:11,030 And the pebbles can either cover an edge or they can be free. 95 00:06:11,030 --> 00:06:13,630 Free if they're just hanging out in the inside 96 00:06:13,630 --> 00:06:16,450 here not being used for anything. 97 00:06:16,450 --> 00:06:18,470 So our goal is to find pebble covers. 98 00:06:18,470 --> 00:06:21,420 But the first claim, why do I care about pebble covers, 99 00:06:21,420 --> 00:06:23,470 I claimed that having a pebble cover 100 00:06:23,470 --> 00:06:26,520 is equivalent to the 2k property. 101 00:06:26,520 --> 00:06:28,960 So that's what I want to show. 102 00:06:37,979 --> 00:06:39,020 So let's start with that. 103 00:06:39,020 --> 00:06:41,860 This is why everything is working. 104 00:06:41,860 --> 00:06:46,940 A graph has a 2k property if and only if it has a pebble cover. 105 00:06:51,740 --> 00:06:55,730 So that's why we care about these pebble coverings. 106 00:06:55,730 --> 00:07:01,090 And this is actually pretty easy to prove 107 00:07:01,090 --> 00:07:04,630 and gives a lot of intuition for why everything works here. 108 00:07:04,630 --> 00:07:09,240 So let's start with the left direction. 109 00:07:09,240 --> 00:07:11,180 So suppose I have a pebble cover. 110 00:07:11,180 --> 00:07:13,470 Suppose somehow I've achieved this property, 111 00:07:13,470 --> 00:07:17,500 covering all the edges, using only two pebbles per vertex. 112 00:07:17,500 --> 00:07:20,690 I claim that we then satisfy the 2k property. 113 00:07:20,690 --> 00:07:22,940 2k property says you take any key vertices, 114 00:07:22,940 --> 00:07:24,510 you induce at most two key edges. 115 00:07:24,510 --> 00:07:28,220 So let's consider k vertices. 116 00:07:28,220 --> 00:07:30,600 Someone chooses k vertices. 117 00:07:30,600 --> 00:07:32,206 doesn't matter which. 118 00:07:32,206 --> 00:07:36,810 It should hold for all of them, for all choices. 119 00:07:36,810 --> 00:07:40,290 So we've got a k vertices here. 120 00:07:40,290 --> 00:07:42,900 n minus k vertices remaining. 121 00:07:42,900 --> 00:07:45,360 We claim that the number of edges induced by those k 122 00:07:45,360 --> 00:07:47,670 vertices is at most 2k. 123 00:07:47,670 --> 00:07:49,980 So look at one of these edges that's wholly inside, 124 00:07:49,980 --> 00:07:51,555 that's induced by these k vertices. 125 00:07:55,381 --> 00:08:00,370 I claim, well, that edge must be covered by a pebble. 126 00:08:00,370 --> 00:08:01,190 Which pebble? 127 00:08:01,190 --> 00:08:05,840 Well, either this one or one on the other side. 128 00:08:05,840 --> 00:08:08,040 But the point is it is covered by a pebble 129 00:08:08,040 --> 00:08:10,920 among these vertices. 130 00:08:10,920 --> 00:08:14,790 My concern is, well, maybe you worry about an edge like this. 131 00:08:18,590 --> 00:08:20,650 Or, maybe you worry about a pebble 132 00:08:20,650 --> 00:08:23,290 here that's covering this edge, but that edge is not 133 00:08:23,290 --> 00:08:25,300 one of the induced edges. 134 00:08:25,300 --> 00:08:27,420 So these vertices are relevant. 135 00:08:27,420 --> 00:08:33,740 It's just the pebbles inside, just among these 2k pebbles. 136 00:08:33,740 --> 00:08:36,840 So in here, there are 2k pebbles. 137 00:08:36,840 --> 00:08:40,159 They must fully cover the induced subgraph. 138 00:08:40,159 --> 00:08:42,890 They must cover all the edges in here. 139 00:08:42,890 --> 00:08:45,470 That means they're at most 2k edges 140 00:08:45,470 --> 00:08:49,390 because there's one pebble per edge at least. 141 00:08:49,390 --> 00:08:51,410 And so there's 2k pebbles in here. 142 00:08:51,410 --> 00:08:55,640 This means they're at must 2k induced edges. 143 00:09:01,340 --> 00:09:02,200 Clear? 144 00:09:02,200 --> 00:09:05,320 That's the obvious direction. 145 00:09:05,320 --> 00:09:08,424 This doesn't really exploit very much about pebbles. 146 00:09:08,424 --> 00:09:10,465 The other direction is a little more interesting. 147 00:09:13,360 --> 00:09:15,000 Why should these pebble covers exist? 148 00:09:15,000 --> 00:09:16,720 Because they seem pretty constrained. 149 00:09:16,720 --> 00:09:19,046 Pebbles can't move very far. 150 00:09:19,046 --> 00:09:24,300 It's not really clearly the same, but it is. 151 00:09:24,300 --> 00:09:26,940 So if we have the 2k property-- 152 00:09:26,940 --> 00:09:31,170 So now we know that every subgraph of k vertices 153 00:09:31,170 --> 00:09:33,210 induces at most 2k edges. 154 00:09:33,210 --> 00:09:35,565 Now, we want to prove that a pebble cover exists. 155 00:09:40,030 --> 00:09:42,760 I'm going to wait. 156 00:09:42,760 --> 00:09:46,180 It will become obvious momentarily. 157 00:09:46,180 --> 00:09:48,332 This is fun. 158 00:09:48,332 --> 00:09:50,040 Sometimes, it's easier to prove a theorem 159 00:09:50,040 --> 00:09:51,610 than it is to come up with an algorithm. 160 00:09:51,610 --> 00:09:54,026 But in this case, it's easier to come up with an algorithm 161 00:09:54,026 --> 00:09:55,280 than it is to prove a theorem. 162 00:09:55,280 --> 00:09:58,580 And you can use the algorithm itself to prove the theorem, 163 00:09:58,580 --> 00:10:00,440 so I'm going to prove this in a moment. 164 00:10:00,440 --> 00:10:01,030 Stay tuned. 165 00:10:04,820 --> 00:10:06,305 Meanwhile, we have an algorithm. 166 00:10:09,120 --> 00:10:10,620 This algorithm is an example of what 167 00:10:10,620 --> 00:10:14,220 we call an incremental style algorithm where you imagine 168 00:10:14,220 --> 00:10:16,260 starting with the empty graph and then 169 00:10:16,260 --> 00:10:19,870 you put in all the edges that belong one at a time. 170 00:10:19,870 --> 00:10:23,760 So add edges one at a time starting from nothing. 171 00:10:29,140 --> 00:10:33,000 One detail is we're going to imagine as edges get added, 172 00:10:33,000 --> 00:10:34,840 we want to direct them. 173 00:10:34,840 --> 00:10:46,240 We're going to direct edges from the pebble that covers them 174 00:10:46,240 --> 00:10:49,410 to the other side. 175 00:10:49,410 --> 00:10:58,220 So if we have an edge and we have a pebble over here, 176 00:10:58,220 --> 00:11:00,590 than I'm going to imagine the edge as being directed 177 00:11:00,590 --> 00:11:04,220 from the pebble to the other side. 178 00:11:04,220 --> 00:11:06,880 That's just for convenience for expressing the algorithm 179 00:11:06,880 --> 00:11:09,530 in a moment. 180 00:11:09,530 --> 00:11:14,860 So now this is for the 2k property. 181 00:11:14,860 --> 00:11:17,155 We'll get to an algorithm for 2k minus 3 a little bit. 182 00:11:29,150 --> 00:11:34,990 So now we have a 4 loop over the edge is we're going to add. 183 00:11:34,990 --> 00:11:39,270 And when I immediately add an edge, it will not be covered, 184 00:11:39,270 --> 00:11:44,000 so it's not directed, just some edge v-w. 185 00:11:44,000 --> 00:11:45,610 I would like to put a pebble here, 186 00:11:45,610 --> 00:11:47,995 but it could be both pebbles at w 187 00:11:47,995 --> 00:11:49,650 are occupied for some other edges. 188 00:11:49,650 --> 00:11:54,450 It could be the pebbles for v are also 189 00:11:54,450 --> 00:11:55,942 occupied for some other edges. 190 00:11:55,942 --> 00:11:56,900 That would be annoying. 191 00:11:56,900 --> 00:12:00,400 I want to somehow reassign a pebble to cover this edge, 192 00:12:00,400 --> 00:12:17,800 so what I'm going to do inside this 4 loop 193 00:12:17,800 --> 00:12:23,840 is search for available pebbles. 194 00:12:23,840 --> 00:12:26,580 And in this case, what turns out to be right 195 00:12:26,580 --> 00:12:31,700 is a directed path in this directed graph 196 00:12:31,700 --> 00:12:37,310 from either v or w to a free pebble. 197 00:12:45,790 --> 00:12:48,010 Either I find one or I don't. 198 00:12:48,010 --> 00:12:52,505 If I find one, let's say from v, there's 199 00:12:52,505 --> 00:12:57,020 some edge and then some other edge and some other edge. 200 00:12:57,020 --> 00:12:58,821 And eventually, I find a free pebble. 201 00:12:58,821 --> 00:13:01,320 Remember a free pebble is one that's floating on the inside, 202 00:13:01,320 --> 00:13:03,340 not being used for anything. 203 00:13:03,340 --> 00:13:05,700 So what does my picture look like? 204 00:13:05,700 --> 00:13:07,610 Remember edges are directed from the pebbles. 205 00:13:07,610 --> 00:13:09,870 That means there was a pebble at v being used for that edge. 206 00:13:09,870 --> 00:13:11,360 There was a pebble at this vertex 207 00:13:11,360 --> 00:13:12,425 being used for that edge. 208 00:13:12,425 --> 00:13:13,800 There was a pebble at this vertex 209 00:13:13,800 --> 00:13:16,560 being used for that edge. 210 00:13:16,560 --> 00:13:18,280 In this case, what do I do? 211 00:13:24,120 --> 00:13:25,050 AUDIENCE: Reverse. 212 00:13:25,050 --> 00:13:26,840 PROFESSOR: Reverse them, yeah. 213 00:13:26,840 --> 00:13:28,680 Just reverse all the edges. 214 00:13:28,680 --> 00:13:32,060 So I have this edge, v-w, here. 215 00:13:32,060 --> 00:13:33,920 I want to put a pebble here, so I'm 216 00:13:33,920 --> 00:13:38,650 going to reassign this guy to be over there, this guy 217 00:13:38,650 --> 00:13:42,310 to be over there, this guy to be over there, and so on. 218 00:13:42,310 --> 00:13:48,500 So I end up with-- that's in the way. 219 00:13:48,500 --> 00:13:50,420 Put w over here. 220 00:13:50,420 --> 00:13:52,190 The new picture is I have v and w. 221 00:13:55,132 --> 00:13:56,965 And I'm going to have left 4 directed edges. 222 00:14:01,540 --> 00:14:06,790 So now this pebble got assigned to be here. 223 00:14:06,790 --> 00:14:09,150 I can't draw left apparently. 224 00:14:09,150 --> 00:14:09,970 The other left. 225 00:14:12,385 --> 00:14:13,510 This pebble assigned there. 226 00:14:13,510 --> 00:14:15,940 This pebble, the free pebble, gets used up. 227 00:14:15,940 --> 00:14:18,410 And now we've got a free pebble over here. 228 00:14:18,410 --> 00:14:21,580 And now we can assign it to be on the edge v-w. 229 00:14:21,580 --> 00:14:23,920 So if I can find such a path from v or from w, 230 00:14:23,920 --> 00:14:25,685 I'm happy because then I can reassign. 231 00:14:38,370 --> 00:14:45,660 If I find such a path, I just shift the pebbles like that, 232 00:14:45,660 --> 00:14:46,600 and I'm done. 233 00:14:51,010 --> 00:14:52,320 But what if I can't? 234 00:14:52,320 --> 00:14:54,310 This is the critical issue, and it is also 235 00:14:54,310 --> 00:14:56,340 core to this part of the proof that we 236 00:14:56,340 --> 00:14:59,690 haven't discover-- haven't yet done. 237 00:14:59,690 --> 00:15:01,504 Why would we hope for pebble covers 238 00:15:01,504 --> 00:15:02,670 to exist in the first place? 239 00:15:02,670 --> 00:15:04,410 We don't know. 240 00:15:04,410 --> 00:15:06,810 I claim if this algorithm fails to find 241 00:15:06,810 --> 00:15:10,400 a path in this situation, then you can immediately 242 00:15:10,400 --> 00:15:13,600 say you do not satisfy the 2k property. 243 00:15:13,600 --> 00:15:15,965 I'd like to say there's no pebble cover, 244 00:15:15,965 --> 00:15:17,090 but that's a little harder. 245 00:15:17,090 --> 00:15:22,160 I'm going to say you do not satisfy the 2k property. 246 00:15:33,820 --> 00:15:37,750 And we actually know already, from this part, 247 00:15:37,750 --> 00:15:39,232 pebble cover implies 2k property. 248 00:15:39,232 --> 00:15:41,190 The contrapositive, which we've already proved, 249 00:15:41,190 --> 00:15:44,010 is if you do not satisfy the 2k property, 250 00:15:44,010 --> 00:15:45,950 you do not have a pebble cover. 251 00:15:45,950 --> 00:15:48,810 So that will actually guarantee correctness of the algorithm. 252 00:15:48,810 --> 00:15:51,530 If I can prove this part, that it violates 2k property, 253 00:15:51,530 --> 00:15:54,270 then I'll know there was no pebble cover, and I'm done. 254 00:15:56,960 --> 00:15:59,090 So why is this true. 255 00:15:59,090 --> 00:16:05,970 I claim if you look at all the nodes reachable 256 00:16:05,970 --> 00:16:13,490 by directed paths from v and w, then 257 00:16:13,490 --> 00:16:18,620 that is a set of nodes that induce more than 2k edges. 258 00:16:18,620 --> 00:16:22,820 So let's say their k nodes you can reach. 259 00:16:22,820 --> 00:16:26,050 I claim there will be more than 2k edges among them. 260 00:16:26,050 --> 00:16:26,550 Why? 261 00:16:29,570 --> 00:16:34,510 It's fun to have proof in the middle of an algorithm. 262 00:16:34,510 --> 00:16:38,540 So here we've got to v and w, and these 263 00:16:38,540 --> 00:16:41,160 are the k nodes that are reachable from v and w, which 264 00:16:41,160 --> 00:16:46,150 means all of the other edges are pointing into this set. 265 00:16:46,150 --> 00:16:48,264 And then, over here, we have everybody else. 266 00:16:48,264 --> 00:16:49,430 I mean it might be everyone. 267 00:16:49,430 --> 00:16:54,050 But potentially, there's some vertices over here. 268 00:16:54,050 --> 00:16:56,690 All the edges are directed from right to left, 269 00:16:56,690 --> 00:17:00,350 otherwise we could reach more stuff. 270 00:17:00,350 --> 00:17:01,680 So what's the situation? 271 00:17:01,680 --> 00:17:03,740 v-w is uncovered. 272 00:17:03,740 --> 00:17:05,216 There's no pebbles that cover it. 273 00:17:10,660 --> 00:17:12,750 Every other edge is covered because there's 274 00:17:12,750 --> 00:17:15,079 only one uncovered edge at any moment. 275 00:17:15,079 --> 00:17:17,240 These edges are all covered from this end. 276 00:17:17,240 --> 00:17:19,839 That's what these directions mean, which 277 00:17:19,839 --> 00:17:21,980 means all the pebbles in here are 278 00:17:21,980 --> 00:17:25,160 used to cover induced edges. 279 00:17:25,160 --> 00:17:28,640 So all the pebbles in here are covering induced edges, 280 00:17:28,640 --> 00:17:32,180 and yet, there's one induced edge that is not covered. 281 00:17:32,180 --> 00:17:34,130 Now they're exactly 2k pebbles. 282 00:17:34,130 --> 00:17:36,120 They're all being used. 283 00:17:36,120 --> 00:17:38,890 I'm assuming here you never have two pebbles covering 284 00:17:38,890 --> 00:17:44,520 the same edge, so that means-- so there's 2k pebbles. 285 00:17:44,520 --> 00:17:48,290 They're all used to cover induced edges, which 286 00:17:48,290 --> 00:17:54,220 implies you have exactly 2k plus 1 edges. 287 00:17:54,220 --> 00:17:56,800 Plus 1 is v-w. 288 00:17:56,800 --> 00:18:00,970 That means that means the graph that we've created so far 289 00:18:00,970 --> 00:18:02,314 violates the 2k property. 290 00:18:02,314 --> 00:18:03,980 Now, we haven't added all the edges yet, 291 00:18:03,980 --> 00:18:05,438 but if we add more edge, it's going 292 00:18:05,438 --> 00:18:07,430 to get even worse potentially. 293 00:18:07,430 --> 00:18:10,780 If we have 2k plus 1 edges now, in the actual graph, 294 00:18:10,780 --> 00:18:14,660 we'll have at least 2k plus 1 edges. 295 00:18:14,660 --> 00:18:18,450 So if this search fails, you know 296 00:18:18,450 --> 00:18:21,367 that you violate the 2k property, which 297 00:18:21,367 --> 00:18:23,200 means you know that there's no pebble cover. 298 00:18:23,200 --> 00:18:25,260 So that proves correctness of the algorithm. 299 00:18:25,260 --> 00:18:28,230 Now we can come back to this claim. 300 00:18:28,230 --> 00:18:38,460 This follows, by correctness of the algorithm, why. 301 00:18:38,460 --> 00:18:40,950 We want to prove if we have the 2k property, 302 00:18:40,950 --> 00:18:42,440 then you have a pebble copper. 303 00:18:42,440 --> 00:18:48,090 Well, if I have the 2k property, this algorithm will work. 304 00:18:48,090 --> 00:18:50,700 This case can never happen because it can only 305 00:18:50,700 --> 00:18:52,390 happen when you violate the 2k property. 306 00:18:52,390 --> 00:18:55,270 So if you have the 2k property, this algorithm, 307 00:18:55,270 --> 00:18:56,450 you can keep running it. 308 00:18:56,450 --> 00:18:57,692 You will always find a path. 309 00:18:57,692 --> 00:18:59,150 You'll be able to shift the pebbles 310 00:18:59,150 --> 00:19:02,440 and always cover things, and so you get a pebble cover 311 00:19:02,440 --> 00:19:04,011 from the algorithm. 312 00:19:04,011 --> 00:19:04,510 The end. 313 00:19:07,600 --> 00:19:09,850 That's how you argue that if you have the 2k property, 314 00:19:09,850 --> 00:19:11,600 you get a pebble cover. 315 00:19:11,600 --> 00:19:13,014 And it's nifty. 316 00:19:13,014 --> 00:19:14,430 Without this algorithm, this would 317 00:19:14,430 --> 00:19:17,660 be quite tricky to specify. 318 00:19:17,660 --> 00:19:20,330 But the algorithm tells you where the violation 319 00:19:20,330 --> 00:19:24,220 would be, tells you where you would violate the 2k property. 320 00:19:24,220 --> 00:19:27,880 And that lets you prove the claim ultimately. 321 00:19:27,880 --> 00:19:30,580 Any questions about that. 322 00:19:30,580 --> 00:19:32,840 This, I think, is the heart of pebble algorithms 323 00:19:32,840 --> 00:19:33,960 and why they work. 324 00:19:33,960 --> 00:19:35,360 It's the cleanest part. 325 00:19:35,360 --> 00:19:38,840 It gets a little bit messier to do the 2k minus 3 thing, 326 00:19:38,840 --> 00:19:41,380 so we'll move to that next. 327 00:19:41,380 --> 00:19:44,890 Maybe before we go there, we can talk about the running time 328 00:19:44,890 --> 00:19:51,445 of the algorithm for those so inclined. 329 00:20:07,680 --> 00:20:10,200 So the heart of the algorithm is this step, 330 00:20:10,200 --> 00:20:14,330 search for directed path for v or w to a free pebble. 331 00:20:14,330 --> 00:20:17,010 This is essentially some of the nodes have free pebbles. 332 00:20:17,010 --> 00:20:19,370 Those are like good nodes. 333 00:20:19,370 --> 00:20:21,340 But basically, we've got a directed graph. 334 00:20:21,340 --> 00:20:25,930 We want to find all the nodes that are reachable from v, 335 00:20:25,930 --> 00:20:28,940 see if there's any good nodes that have free pebbles, 336 00:20:28,940 --> 00:20:30,607 search from all the nodes from w. 337 00:20:30,607 --> 00:20:32,940 This you could do with a depth first search or a breadth 338 00:20:32,940 --> 00:20:35,360 first search or your favorite search algorithm. 339 00:20:35,360 --> 00:20:36,297 Takes linear time. 340 00:20:36,297 --> 00:20:38,130 Order the number of vertices plus the number 341 00:20:38,130 --> 00:20:41,350 of edges in the graph. 342 00:20:41,350 --> 00:20:43,990 We do this search v times. 343 00:20:47,090 --> 00:20:47,860 Why v times? 344 00:20:54,210 --> 00:20:57,950 So we add edges one at a time. 345 00:20:57,950 --> 00:21:01,560 We're hoping that we have the 2k property. 346 00:21:01,560 --> 00:21:03,480 The 2k property implies that, in particular, 347 00:21:03,480 --> 00:21:05,980 there at most 2v edges. 348 00:21:05,980 --> 00:21:08,550 So in general, we do this e times. 349 00:21:08,550 --> 00:21:09,880 We keep adding edges. 350 00:21:09,880 --> 00:21:13,850 We would add e edges to the graph hopefully. 351 00:21:13,850 --> 00:21:16,960 In general, e can be much larger than v in a graph. e 352 00:21:16,960 --> 00:21:20,330 could v squared, the worst case. 353 00:21:20,330 --> 00:21:23,310 But this algorithm will fail by the time 354 00:21:23,310 --> 00:21:25,950 you add 2k plus 1 edges because then you definitely 355 00:21:25,950 --> 00:21:28,740 don't satisfy the 2k property over the entire graph, 356 00:21:28,740 --> 00:21:30,410 so particularly you won't satisfy it 357 00:21:30,410 --> 00:21:31,580 on some subset of vertices. 358 00:21:34,320 --> 00:21:36,560 So you will only have to run this loop v times, 359 00:21:36,560 --> 00:21:39,170 not e times-- or 2v times. 360 00:21:39,170 --> 00:21:42,320 So this is a little bit smaller, and so this product 361 00:21:42,320 --> 00:21:47,670 is v squared plus ve. 362 00:21:47,670 --> 00:21:51,060 Normally, we write ve, but this is slightly more precise, 363 00:21:51,060 --> 00:21:53,370 which is the same as Bellman Ford 364 00:21:53,370 --> 00:21:56,490 algorithm if you've taken algorithms. 365 00:21:56,490 --> 00:21:59,680 I'll just mention that there is an algorithm slightly fancier 366 00:21:59,680 --> 00:22:02,370 that just requires this term. 367 00:22:02,370 --> 00:22:05,390 This is possible. 368 00:22:05,390 --> 00:22:08,300 You don't need this ve part. 369 00:22:08,300 --> 00:22:11,795 but it's beside the point to our goal, which is just 370 00:22:11,795 --> 00:22:14,320 to understand when things are rigid, 371 00:22:14,320 --> 00:22:16,980 when they're not in an efficient amount of time. 372 00:22:16,980 --> 00:22:19,680 So this is polynomial in any case. 373 00:22:19,680 --> 00:22:22,127 This also the best known algorithm, v squared. 374 00:22:22,127 --> 00:22:23,960 Open problem is whether you could do better. 375 00:22:27,770 --> 00:22:29,067 Questions? 376 00:22:29,067 --> 00:22:29,566 Yeah? 377 00:22:29,566 --> 00:22:35,530 AUDIENCE: Is there more than 2v edges instead of, [INAUDIBLE] 378 00:22:35,530 --> 00:22:37,612 that [INAUDIBLE] problem. 379 00:22:37,612 --> 00:22:39,570 PROFESSOR: Yes, there are more than to v edges. 380 00:22:39,570 --> 00:22:40,300 Oh, right! 381 00:22:40,300 --> 00:22:41,630 So there's done. 382 00:22:41,630 --> 00:22:42,815 Great. 383 00:22:42,815 --> 00:22:44,940 You can just check in the beginning, are there more 384 00:22:44,940 --> 00:22:45,980 than to v edges. 385 00:22:45,980 --> 00:22:52,880 If so, you do not satisfy the 2k property, and so you can stop. 386 00:22:52,880 --> 00:22:55,600 So that takes constant time to check those cases, otherwise e 387 00:22:55,600 --> 00:22:56,780 is small. 388 00:22:56,780 --> 00:22:58,910 And then you only take the square time. 389 00:22:58,910 --> 00:23:00,166 Thanks. 390 00:23:00,166 --> 00:23:00,665 That's key. 391 00:23:06,520 --> 00:23:10,420 So that was the 2k property. 392 00:23:10,420 --> 00:23:14,080 Let's do 2k minus 3. 393 00:23:28,960 --> 00:23:30,530 For the 2k minus 3 algorithm, it's 394 00:23:30,530 --> 00:23:33,880 going to be pretty much the same as this algorithm. 395 00:23:33,880 --> 00:23:36,900 So in particular, every vertex is to attach pebbles. 396 00:23:36,900 --> 00:23:38,720 Each pebble can cover when it's in an edge, 397 00:23:38,720 --> 00:23:40,060 otherwise it's free. 398 00:23:40,060 --> 00:23:42,730 Our goal is to cover every edge. 399 00:23:42,730 --> 00:23:44,120 But it's slightly differently. 400 00:23:44,120 --> 00:23:46,640 We have to deal with this minus 3 business. 401 00:23:46,640 --> 00:24:00,620 And for that we need another claim, which 402 00:24:00,620 --> 00:24:07,740 is that a graph has a 2k minus 3 property if 403 00:24:07,740 --> 00:24:14,640 and only if g plus three copies of an edge e 404 00:24:14,640 --> 00:24:30,610 has the 2k property for every edge, e and g. 405 00:24:30,610 --> 00:24:35,097 Should probably say g has. 406 00:24:35,097 --> 00:24:36,930 So I want to know whether my-- ultimately, I 407 00:24:36,930 --> 00:24:39,040 care whether my graph has a 2k minus 3 property. 408 00:24:39,040 --> 00:24:41,620 This is most of the Laman condition. 409 00:24:41,620 --> 00:24:43,330 It's the hard part to check. 410 00:24:43,330 --> 00:24:45,920 And 2k property is what I know how to check. 411 00:24:45,920 --> 00:24:48,190 So I claim all you need to do to check it-- 412 00:24:48,190 --> 00:24:49,770 this would actually be an algorithm. 413 00:24:49,770 --> 00:24:52,680 For every edge, turn that single edge 414 00:24:52,680 --> 00:24:55,470 into four copies of the edge, add three more, 415 00:24:55,470 --> 00:24:57,510 check whether it has the 2k property, 416 00:24:57,510 --> 00:25:00,390 remove those extra three copies, take the next edge, 417 00:25:00,390 --> 00:25:03,150 add three copies, check the 2k property. 418 00:25:03,150 --> 00:25:07,280 So with another factor of e, which 419 00:25:07,280 --> 00:25:11,750 has to be order v, if you're willing to spend v cubed time, 420 00:25:11,750 --> 00:25:15,240 you can just run this algorithm for each edge, 421 00:25:15,240 --> 00:25:19,580 quadruple it, see whether it still has the 2k property. 422 00:25:19,580 --> 00:25:22,330 So that's the connection between these 2 things. 423 00:25:22,330 --> 00:25:23,502 Let me prove this claim. 424 00:25:23,502 --> 00:25:25,210 And then I'll tell you a better algorithm 425 00:25:25,210 --> 00:25:26,501 that only takes v squared time. 426 00:25:33,069 --> 00:25:35,450 Which one's easier? 427 00:25:35,450 --> 00:25:39,525 In both cases, I want to take k vertices. 428 00:25:44,790 --> 00:25:48,215 And then I'll do in this direction first. 429 00:25:51,090 --> 00:25:53,900 So how do we prove this? 430 00:25:53,900 --> 00:25:56,580 First, this is actually really easy. 431 00:25:56,580 --> 00:25:59,330 Suppose g has a 2k minus 3 property. 432 00:25:59,330 --> 00:26:02,170 So if I have k vertices here, I know 433 00:26:02,170 --> 00:26:06,470 that the number of edges in here is at most 2k minus 3. 434 00:26:06,470 --> 00:26:07,915 So here's k vertices. 435 00:26:07,915 --> 00:26:09,540 Looking at the number of induced edges, 436 00:26:09,540 --> 00:26:13,270 it's going to be at most 2k minus 3. 437 00:26:13,270 --> 00:26:16,440 What I'm claiming is then if I quadruple an edge, 438 00:26:16,440 --> 00:26:22,370 if I add three new edges, I have at most 2k edges afterwards. 439 00:26:22,370 --> 00:26:23,730 I think that's pretty clear. 440 00:26:23,730 --> 00:26:25,780 2k minus 3 would be 4 at most. 441 00:26:25,780 --> 00:26:28,400 If I add three copies of any edge, could be in this set 442 00:26:28,400 --> 00:26:30,770 or outside the set would be even better, 443 00:26:30,770 --> 00:26:33,740 the number of edges inside the set will be at most 2k. 444 00:26:33,740 --> 00:26:36,080 So this is in g. 445 00:26:36,080 --> 00:26:45,620 This implies there's at most 2k and g plus thrice e. 446 00:26:45,620 --> 00:26:47,360 This is non-standard notation by the way. 447 00:26:47,360 --> 00:26:50,080 It just means add three copies of that edge. 448 00:26:50,080 --> 00:26:55,330 So we would normally draw that like this, 449 00:26:55,330 --> 00:26:58,020 four copies of the edge. 450 00:26:58,020 --> 00:27:02,700 So that was half of the claim, pretty trivial. 451 00:27:02,700 --> 00:27:04,230 The other half is almost as trivial. 452 00:27:09,620 --> 00:27:12,930 So on the other direction, we assume 453 00:27:12,930 --> 00:27:16,980 that g plus 3e has this property for every edge. 454 00:27:16,980 --> 00:27:20,620 And now we need to prove that g has a 2k minus 3 455 00:27:20,620 --> 00:27:22,359 property for every set of k vertices. 456 00:27:22,359 --> 00:27:24,150 So we're looking at that set of k vertices. 457 00:27:24,150 --> 00:27:26,430 We want to argue that in g, there's 458 00:27:26,430 --> 00:27:28,790 at most 2k minus 3 edges. 459 00:27:28,790 --> 00:27:33,020 What we know is that in here, in g plus 3 e for any e-- 460 00:27:33,020 --> 00:27:37,850 so it's a little awkward-- but let me start by drawing g. 461 00:27:37,850 --> 00:27:40,520 We want to claim that the number of edges in here 462 00:27:40,520 --> 00:27:43,260 is at most 2k minus 3, so I'll put a question mark. 463 00:27:47,180 --> 00:27:49,410 So there are 2 possibilities here. 464 00:27:49,410 --> 00:27:53,090 It could be either this graph is completely empty. 465 00:27:53,090 --> 00:27:55,710 If there are no edges in here, then surely there 466 00:27:55,710 --> 00:27:58,210 are at most 2k minus 3 of them, assuming k 467 00:27:58,210 --> 00:28:02,440 is bigger than 1, which I haven't mentioned. 468 00:28:02,440 --> 00:28:04,850 But throughout here, I need the k is bigger than 1. 469 00:28:04,850 --> 00:28:07,335 You can never have negative 1 edges on subgraphs, 470 00:28:07,335 --> 00:28:10,840 so the 2k in the 2k minus 3 property only 471 00:28:10,840 --> 00:28:13,630 hold for at least 2 vertices. 472 00:28:13,630 --> 00:28:14,300 K is at least 2. 473 00:28:17,070 --> 00:28:19,250 So if there are no edges, find I'm done. 474 00:28:19,250 --> 00:28:23,270 If there are edges in here, then I can do this trick. 475 00:28:23,270 --> 00:28:24,160 So there's some edge. 476 00:28:24,160 --> 00:28:25,830 Pick your favorite edge. 477 00:28:25,830 --> 00:28:29,360 Call it e in this subset. 478 00:28:29,360 --> 00:28:33,427 Produce out of it g plus 3e, which 479 00:28:33,427 --> 00:28:35,260 just looks like the same thing, but now it's 480 00:28:35,260 --> 00:28:38,280 got four copies of that edge. 481 00:28:38,280 --> 00:28:42,590 This we know has at most 2k edges in here. 482 00:28:42,590 --> 00:28:44,440 The original graph is exactly the same 483 00:28:44,440 --> 00:28:46,610 except it lacks those three edges, therefore, 484 00:28:46,610 --> 00:28:49,380 there's at most 2k minus 3 of them. 485 00:28:49,380 --> 00:28:53,190 So it's really the same proof in both directions. 486 00:28:53,190 --> 00:28:55,430 Here, you have to use your freedom 487 00:28:55,430 --> 00:28:56,990 in choosing e to choose an edge that 488 00:28:56,990 --> 00:28:59,090 is induced in this subgraph. 489 00:28:59,090 --> 00:29:00,910 You can't choose some other edge out here. 490 00:29:05,300 --> 00:29:05,800 Question? 491 00:29:05,800 --> 00:29:09,062 AUDIENCE: So this seems kind of cheap because we're 492 00:29:09,062 --> 00:29:15,440 using the graph as a linkage in the end, 493 00:29:15,440 --> 00:29:21,245 so adding these extra edges, they all collapse into one. 494 00:29:21,245 --> 00:29:22,370 PROFESSOR: Ah, interesting. 495 00:29:22,370 --> 00:29:22,870 Right. 496 00:29:22,870 --> 00:29:26,040 So why this feels like cheating because, 497 00:29:26,040 --> 00:29:29,110 from a linkage perspective, these 2 guys 498 00:29:29,110 --> 00:29:30,550 have exactly the same constraints. 499 00:29:30,550 --> 00:29:32,229 AUDIENCE: Yeah. 500 00:29:32,229 --> 00:29:33,020 PROFESSOR: I agree. 501 00:29:33,020 --> 00:29:34,420 It's weird. 502 00:29:34,420 --> 00:29:38,350 At this point, this is a device. 503 00:29:38,350 --> 00:29:40,240 You could think of it as adding edges. 504 00:29:40,240 --> 00:29:42,210 Another way to think of it is this edge 505 00:29:42,210 --> 00:29:45,250 has to be covered by four pebbles. 506 00:29:45,250 --> 00:29:47,310 That's probably a little more intuitive. 507 00:29:47,310 --> 00:29:49,140 So having to cover an edge by four pebbles, 508 00:29:49,140 --> 00:29:51,540 essentially, is pinning the edge. 509 00:29:51,540 --> 00:29:53,880 Because on the one hand, you have a single pebble just 510 00:29:53,880 --> 00:29:55,611 to say this is an edge. 511 00:29:55,611 --> 00:29:57,110 And then you have three more pebbles 512 00:29:57,110 --> 00:29:59,040 to eat up the translations and rotations. 513 00:29:59,040 --> 00:30:01,480 That's intuitively what's going on. 514 00:30:01,480 --> 00:30:04,470 I agree this looks weird. 515 00:30:04,470 --> 00:30:07,310 And at this point, we're just playing the graph theory game 516 00:30:07,310 --> 00:30:08,740 and ignoring the linkages. 517 00:30:08,740 --> 00:30:11,090 That's the short answer why this is OK. 518 00:30:11,090 --> 00:30:13,110 But ultimately, intuitively, what's going on 519 00:30:13,110 --> 00:30:15,180 is that these three edges are just 520 00:30:15,180 --> 00:30:18,750 representing the translations and rotations being eaten. 521 00:30:18,750 --> 00:30:21,940 And they have to be somehow eatable universally 522 00:30:21,940 --> 00:30:22,660 at every edge. 523 00:30:22,660 --> 00:30:24,944 That's what this is saying. 524 00:30:24,944 --> 00:30:26,610 I don't have a great intuition for that, 525 00:30:26,610 --> 00:30:29,450 but it is-- pretty sure you do need 526 00:30:29,450 --> 00:30:31,525 to say for every edge, not just some edge. 527 00:30:35,950 --> 00:30:39,060 So at this point, you have a polynomial time algorithm, 528 00:30:39,060 --> 00:30:40,360 so I'm done. 529 00:30:40,360 --> 00:30:44,260 But let me briefly mention how you could make it faster 530 00:30:44,260 --> 00:30:50,360 by modifying this algorithm to do the 2k minus 3 situation. 531 00:30:50,360 --> 00:30:54,630 Dare I-- I won't literally modify the algorithm. 532 00:30:54,630 --> 00:30:57,090 I'll write a new version. 533 00:30:57,090 --> 00:30:59,520 But I'm going to use that as a subroutine basically. 534 00:31:15,990 --> 00:31:26,150 And so algorithm 2k minus 3 version. 535 00:31:26,150 --> 00:31:27,766 So it's going to be the same style. 536 00:31:27,766 --> 00:31:29,390 We're going to add edges one at a time. 537 00:31:29,390 --> 00:31:32,010 We'll direct the edges in the same way for each added edge 538 00:31:32,010 --> 00:31:33,610 v-w. 539 00:31:33,610 --> 00:31:40,540 I'll just write for each added edge v-w. 540 00:31:45,700 --> 00:31:51,400 Before I just tried to add the edge and cover it with pebble. 541 00:31:51,400 --> 00:31:53,270 Now, I want to cover it with four pebbles. 542 00:31:53,270 --> 00:31:56,120 I want to basically add the edge four times. 543 00:32:07,150 --> 00:32:12,660 I'm going to write as above to mean this step. 544 00:32:12,660 --> 00:32:14,500 So every time I add the edge, I search 545 00:32:14,500 --> 00:32:18,520 for a directed path from v or w for free pebble. 546 00:32:18,520 --> 00:32:22,000 When I find it, I do the pebble shift. 547 00:32:22,000 --> 00:32:24,170 I do that four times. 548 00:32:24,170 --> 00:32:26,490 Then basically, I have four pebbles on the edge, 549 00:32:26,490 --> 00:32:28,989 or you could think of them as being four copies of the edge, 550 00:32:28,989 --> 00:32:30,560 each has one pebble. 551 00:32:30,560 --> 00:32:33,480 Either I succeed and I get all four, or I don't get all four. 552 00:32:36,500 --> 00:32:43,530 On success, this is just a temporary measure. 553 00:32:43,530 --> 00:32:46,480 At that point, I'm going to delete three of the copies. 554 00:32:46,480 --> 00:32:48,800 Put it back to a regular single edge. 555 00:32:48,800 --> 00:32:54,077 This frees three pebbles for future use. 556 00:32:54,077 --> 00:32:55,910 So I don't want every edge to be quadrupled. 557 00:32:58,832 --> 00:33:00,790 I don't want them all to be quadrupled at once. 558 00:33:00,790 --> 00:33:02,430 I want to try quadrupling one edge, 559 00:33:02,430 --> 00:33:03,950 then try quadrupling the next edge, 560 00:33:03,950 --> 00:33:05,210 try quadrupling the next edge. 561 00:33:05,210 --> 00:33:07,720 But when I'm quadrupling an edge, 562 00:33:07,720 --> 00:33:10,690 all the other edges exist as single edges. 563 00:33:10,690 --> 00:33:12,980 So I delete the three copies. 564 00:33:12,980 --> 00:33:15,070 And then this four loop continues and tries 565 00:33:15,070 --> 00:33:17,400 the next edge. 566 00:33:17,400 --> 00:33:21,590 On failure-- here I'm going to say something 567 00:33:21,590 --> 00:33:23,590 more interesting-- Normally, on failure I'd say, 568 00:33:23,590 --> 00:33:26,500 well, you don't satisfy the 2k minus 3 property. 569 00:33:26,500 --> 00:33:27,690 Game over. 570 00:33:27,690 --> 00:33:31,820 But you can be a little more sophisticated. 571 00:33:31,820 --> 00:33:34,970 Just say delete all the copies of e. 572 00:33:34,970 --> 00:33:36,960 I guess there's four of them. 573 00:33:36,960 --> 00:33:40,690 Whatever pebbles you can acquire, you give them up. 574 00:33:40,690 --> 00:33:43,470 Delete the edge and call the edge redundant. 575 00:33:48,870 --> 00:33:50,470 Basically, in this case, you could 576 00:33:50,470 --> 00:33:53,850 argue that edge was superfluous for rigidity purposes. 577 00:33:53,850 --> 00:33:55,650 You didn't need it. 578 00:33:55,650 --> 00:33:57,800 So the algorithm doesn't just fail. 579 00:33:57,800 --> 00:34:00,230 It says this was a useless edge. 580 00:34:00,230 --> 00:34:02,320 And it'll tell you which edges are useful, 581 00:34:02,320 --> 00:34:05,660 which ones are non-redundant from a rigidity standpoint. 582 00:34:05,660 --> 00:34:12,989 And then when you're done, you will be rigid if and only 583 00:34:12,989 --> 00:34:23,690 if the number of non-redundant edges that remain 584 00:34:23,690 --> 00:34:27,139 equals 2n minus 3. 585 00:34:27,139 --> 00:34:29,690 So that's the last part of the Laman check. 586 00:34:29,690 --> 00:34:31,870 So this is giving you a little bit more information 587 00:34:31,870 --> 00:34:34,719 than just do I satisfy the 2k minus 3 property. 588 00:34:34,719 --> 00:34:37,204 To get that, you just check whether you ever failed. 589 00:34:37,204 --> 00:34:38,620 But in this case, you can actually 590 00:34:38,620 --> 00:34:41,590 see, ah, these are the useless edges. 591 00:34:41,590 --> 00:34:44,489 They're those overbracing edges. 592 00:34:44,489 --> 00:34:45,980 Everything else is useful. 593 00:34:45,980 --> 00:34:48,630 And if I end up having enough useful edges to n minus 3 594 00:34:48,630 --> 00:34:51,980 of them, then I know I'm rigid. 595 00:34:51,980 --> 00:34:53,530 Otherwise, I'm going to be flexible. 596 00:34:53,530 --> 00:34:56,144 So this gives you all the information you want. 597 00:34:56,144 --> 00:34:57,560 With a little bit more effort, you 598 00:34:57,560 --> 00:35:02,040 could even figure out if I'm flexible, which parts are rigid 599 00:35:02,040 --> 00:35:06,160 and which parts can move relative to each other. 600 00:35:06,160 --> 00:35:07,700 This, of course, generically rigid. 601 00:35:10,300 --> 00:35:14,970 Finally, let me show you this thing in action. 602 00:35:14,970 --> 00:35:18,010 So look over there. 603 00:35:18,010 --> 00:35:21,780 This is an implementation by Audrey Lee-Saint John. 604 00:35:21,780 --> 00:35:24,050 And so here's a simple graph. 605 00:35:24,050 --> 00:35:26,765 You can probably see this top part is flexible. 606 00:35:26,765 --> 00:35:28,070 It's quadrilateral. 607 00:35:28,070 --> 00:35:31,149 Bottom part is overbraced. 608 00:35:31,149 --> 00:35:32,440 This is in 2 dimensions, right? 609 00:35:32,440 --> 00:35:33,856 So just triangles would be enough, 610 00:35:33,856 --> 00:35:36,750 but I've added an extra edge here. 611 00:35:36,750 --> 00:35:38,920 And this is going to check the Laman condition one 612 00:35:38,920 --> 00:35:40,240 step at a time. 613 00:35:40,240 --> 00:35:42,340 So we start with 2 pebbles everywhere. 614 00:35:42,340 --> 00:35:44,650 We start by adding that top edge. 615 00:35:44,650 --> 00:35:46,640 Right now, there are four pebbles on that edge, 616 00:35:46,640 --> 00:35:47,223 so it's great. 617 00:35:47,223 --> 00:35:48,250 I can just add the edge. 618 00:35:48,250 --> 00:35:51,262 Let's say I added it four times. 619 00:35:51,262 --> 00:35:52,470 There are four pebbles there. 620 00:35:52,470 --> 00:35:54,770 But then in the end, I just need one. 621 00:35:54,770 --> 00:35:56,470 So let's skip that step. 622 00:35:56,470 --> 00:36:00,190 And now I've got the one pebble from b, and we're happy. 623 00:36:00,190 --> 00:36:03,270 So that is its own rigid component. 624 00:36:03,270 --> 00:36:05,700 Next, let's add this edge ef. 625 00:36:05,700 --> 00:36:09,010 So this also has four pebbles on it, so we're done. 626 00:36:09,010 --> 00:36:09,810 Next, we have cd. 627 00:36:09,810 --> 00:36:11,690 That also has-- you could change the order 628 00:36:11,690 --> 00:36:13,398 if you think this one's a little trivial. 629 00:36:13,398 --> 00:36:14,940 Now is when the action happens. 630 00:36:14,940 --> 00:36:17,690 Let's add this edge bc. 631 00:36:17,690 --> 00:36:21,380 So currently, it is only covered by three pebbles. 632 00:36:21,380 --> 00:36:23,910 But we need a fourth. 633 00:36:23,910 --> 00:36:27,620 So we're going to take one of these free pebbles on a 634 00:36:27,620 --> 00:36:29,150 and move it along b. 635 00:36:29,150 --> 00:36:31,960 We found that by starting from b and searching out 636 00:36:31,960 --> 00:36:33,160 and finding a free pebble. 637 00:36:33,160 --> 00:36:34,576 So we just flip that edge. 638 00:36:34,576 --> 00:36:35,950 Now we've got a free pebble on b. 639 00:36:35,950 --> 00:36:39,930 Now we've got four pebbles on bc, and we can add the edge. 640 00:36:39,930 --> 00:36:42,280 But we only actually take one of them. 641 00:36:42,280 --> 00:36:44,550 So I'm skipping the part where we add the four copies 642 00:36:44,550 --> 00:36:48,310 and immediately remove three of them because that's silly. 643 00:36:48,310 --> 00:36:48,810 Cool. 644 00:36:48,810 --> 00:36:50,910 So that's its own rigid component it turns out. 645 00:36:50,910 --> 00:36:53,320 Each of these things is independently-- 646 00:36:53,320 --> 00:36:55,690 the colors represent rigid components. 647 00:36:55,690 --> 00:36:57,820 And right now nothing is tied together. 648 00:36:57,820 --> 00:36:58,780 Everything's flexible. 649 00:36:58,780 --> 00:36:59,450 Flexible at b. 650 00:36:59,450 --> 00:37:01,750 Flexible at c. 651 00:37:01,750 --> 00:37:05,499 Let's add this diagonal df. 652 00:37:05,499 --> 00:37:07,040 So right now, it only has one pebble, 653 00:37:07,040 --> 00:37:08,750 which means we need four pebbles. 654 00:37:08,750 --> 00:37:10,960 So we're actually going to have to get one at f, 655 00:37:10,960 --> 00:37:12,376 and we're going to have to get one 656 00:37:12,376 --> 00:37:14,880 at d because there can only be two at each. 657 00:37:14,880 --> 00:37:18,367 So first, we'll do I guess a search from d, 658 00:37:18,367 --> 00:37:20,470 and we immediately find a pebble. 659 00:37:20,470 --> 00:37:21,820 We move it down there. 660 00:37:21,820 --> 00:37:22,810 Great. 661 00:37:22,810 --> 00:37:24,160 Then, we search from f. 662 00:37:24,160 --> 00:37:25,330 We find a pebble there. 663 00:37:25,330 --> 00:37:26,270 We move it. 664 00:37:26,270 --> 00:37:26,770 Boom! 665 00:37:26,770 --> 00:37:31,346 We've got our edge, added all four pebbles. 666 00:37:31,346 --> 00:37:33,220 Eventually we're going to run out of pebbles, 667 00:37:33,220 --> 00:37:35,380 but right now, we are very flexible. 668 00:37:35,380 --> 00:37:36,630 Let's add this other diagonal. 669 00:37:36,630 --> 00:37:37,950 This should also be possible. 670 00:37:37,950 --> 00:37:41,000 Right now, there's one pebble at e, one pebble at c. 671 00:37:41,000 --> 00:37:43,350 We've got to find two more pebbles. 672 00:37:43,350 --> 00:37:44,900 So first, we'll follow this edge. 673 00:37:44,900 --> 00:37:45,930 Find a free pebble at f. 674 00:37:45,930 --> 00:37:47,660 That was easy. 675 00:37:47,660 --> 00:37:51,242 Next, we'll look at from c. 676 00:37:51,242 --> 00:37:53,060 There's only one way we can go from c. 677 00:37:53,060 --> 00:37:54,380 We can't follow the back edge. 678 00:37:54,380 --> 00:37:55,650 Got to go forward. 679 00:37:55,650 --> 00:37:57,810 Got a pebble at d. 680 00:37:57,810 --> 00:37:59,040 Flip it around. 681 00:37:59,040 --> 00:38:03,360 Now, we've got four pebbles on c and e, so we can add the edge. 682 00:38:05,980 --> 00:38:07,030 Now, let's add ef. 683 00:38:07,030 --> 00:38:10,810 Right now, we've only got one pebble, yet we need four. 684 00:38:10,810 --> 00:38:12,444 So let's start by searching from a. 685 00:38:12,444 --> 00:38:13,860 Oh, we found a pebble immediately. 686 00:38:13,860 --> 00:38:17,570 In general, we would have to follow many edges. 687 00:38:17,570 --> 00:38:19,419 So there's a from f. 688 00:38:19,419 --> 00:38:20,710 There are two ways we could go. 689 00:38:20,710 --> 00:38:22,710 Either one of them would have given us a pebble. 690 00:38:22,710 --> 00:38:24,110 Let's flip the yellow edge. 691 00:38:24,110 --> 00:38:24,610 Boom! 692 00:38:24,610 --> 00:38:28,507 We've got f, one pebble, but we need another one. 693 00:38:28,507 --> 00:38:30,840 Now, we cannot get another pebble from e because we just 694 00:38:30,840 --> 00:38:33,200 flipped the edge, but we can get a pebble from d, 695 00:38:33,200 --> 00:38:36,580 so we flip that edge. 696 00:38:36,580 --> 00:38:41,350 And now we can add the edge af to more edges. 697 00:38:41,350 --> 00:38:43,770 It's a little tedious. 698 00:38:43,770 --> 00:38:45,920 So next is cf. 699 00:38:45,920 --> 00:38:48,030 We're running out of pebbles here. 700 00:38:48,030 --> 00:38:51,450 There's only five pebbles total in the system. 701 00:38:51,450 --> 00:38:53,890 We need four of them right here because we're 702 00:38:53,890 --> 00:38:56,050 getting almost rigid. 703 00:38:56,050 --> 00:38:57,190 So let's see. 704 00:38:57,190 --> 00:38:59,306 We've got cf. 705 00:38:59,306 --> 00:39:01,179 Let's start from searching from f. 706 00:39:01,179 --> 00:39:02,470 There's only one way we can go. 707 00:39:02,470 --> 00:39:03,178 We find a pebble. 708 00:39:03,178 --> 00:39:04,550 We flip it around. 709 00:39:04,550 --> 00:39:07,220 Now we've got c. 710 00:39:07,220 --> 00:39:08,870 There's only one way to go from c. 711 00:39:08,870 --> 00:39:10,900 We find the pebble at e. 712 00:39:10,900 --> 00:39:12,120 And we flip it around. 713 00:39:12,120 --> 00:39:14,960 Now we've got the two pebbles. 714 00:39:14,960 --> 00:39:15,991 Cool. 715 00:39:15,991 --> 00:39:17,490 So we've got the three pebbles here, 716 00:39:17,490 --> 00:39:20,230 which are representing our translations and rotations. 717 00:39:20,230 --> 00:39:22,190 The only other pebble left is this one, 718 00:39:22,190 --> 00:39:24,770 which is basically representing the degree of freedom 719 00:39:24,770 --> 00:39:26,490 in this quadrilateral. 720 00:39:26,490 --> 00:39:28,990 So when we go to add the last edge, which is-- so 721 00:39:28,990 --> 00:39:31,030 at this point, this is a ridge it component 722 00:39:31,030 --> 00:39:33,290 because of the triangles. 723 00:39:33,290 --> 00:39:35,260 And we go to add the last edge, we 724 00:39:35,260 --> 00:39:38,310 will fail to find enough pebbles. 725 00:39:38,310 --> 00:39:38,930 Let's see. 726 00:39:38,930 --> 00:39:40,430 We can find three of them. 727 00:39:40,430 --> 00:39:42,060 We can grab the one from e. 728 00:39:42,060 --> 00:39:45,860 Or let's see so-- it's not going to show us. 729 00:39:45,860 --> 00:39:50,410 But from e, we can grab f, the pebble at f. 730 00:39:50,410 --> 00:39:52,160 From d, we can grab the pebble at c. 731 00:39:52,160 --> 00:39:54,541 From d, we can grab the other pebble at f. 732 00:39:54,541 --> 00:39:56,040 We've got three pebbles, but there's 733 00:39:56,040 --> 00:39:59,560 no way to get to this pebble because both of these edges 734 00:39:59,560 --> 00:40:00,800 are directed down. 735 00:40:00,800 --> 00:40:04,150 So you can never get from the below part to the above part. 736 00:40:04,150 --> 00:40:06,230 So it's not obvious that this is working. 737 00:40:06,230 --> 00:40:08,400 That's what the proof is for. 738 00:40:08,400 --> 00:40:11,410 But at least you see it in action. 739 00:40:11,410 --> 00:40:14,716 I'll just run it very quickly for another graph. 740 00:40:14,716 --> 00:40:17,600 Let's say a big one. 741 00:40:17,600 --> 00:40:20,220 This one is minimally, generically rigid. 742 00:40:20,220 --> 00:40:23,250 So it's fun to watch for a while. 743 00:40:23,250 --> 00:40:27,935 You get pebbles moving around. 744 00:40:27,935 --> 00:40:29,820 In this case, you have some longer paths 745 00:40:29,820 --> 00:40:33,090 you have to follow to get enough pebbles. 746 00:40:33,090 --> 00:40:35,515 It depends a lot on the insertion order that you use. 747 00:40:41,950 --> 00:40:46,006 So in each case, you need four pebbles, two on each side. 748 00:40:46,006 --> 00:40:47,380 And if so, you can add your edge. 749 00:40:47,380 --> 00:40:48,270 Otherwise, you can't. 750 00:40:48,270 --> 00:40:50,990 What I haven't described is this color coding 751 00:40:50,990 --> 00:40:54,190 which is figuring out when you have rigid components. 752 00:40:54,190 --> 00:40:57,632 Roughly speaking, to find what your rigid component is-- 753 00:40:57,632 --> 00:41:00,090 if you're an edge, you want to know what rigid component am 754 00:41:00,090 --> 00:41:04,480 I in-- you basically just search for all the vertices 755 00:41:04,480 --> 00:41:07,510 that are reachable from your edge. 756 00:41:07,510 --> 00:41:09,240 Those are all in your rigid component. 757 00:41:09,240 --> 00:41:11,242 That's what we saw. 758 00:41:11,242 --> 00:41:13,075 So this graph happens to be minimally rigid, 759 00:41:13,075 --> 00:41:16,161 and it detects that. 760 00:41:16,161 --> 00:41:17,660 But then it can be a little bit more 761 00:41:17,660 --> 00:41:19,180 as in your rigid component. 762 00:41:19,180 --> 00:41:24,350 Some of the incoming edges-- let's see. 763 00:41:24,350 --> 00:41:26,390 Draw a picture. 764 00:41:26,390 --> 00:41:30,410 So here's everything you can reach from v-w. 765 00:41:30,410 --> 00:41:32,430 And say you're following an incoming edge here 766 00:41:32,430 --> 00:41:34,692 from some other vertex u. 767 00:41:34,692 --> 00:41:36,400 And then suppose these are all the things 768 00:41:36,400 --> 00:41:38,540 you can reach from you. 769 00:41:38,540 --> 00:41:41,110 If there are zero pebbles out here, 770 00:41:41,110 --> 00:41:43,622 then this whole thing is a rigid component. 771 00:41:43,622 --> 00:41:44,830 And you just keep doing that. 772 00:41:44,830 --> 00:41:46,360 You check an incoming edge. 773 00:41:46,360 --> 00:41:49,090 If there's zero pebbles in that reachable piece, 774 00:41:49,090 --> 00:41:50,000 then you merge. 775 00:41:50,000 --> 00:41:51,000 And you keep doing that. 776 00:41:51,000 --> 00:41:53,594 Those are all the things that are rigidly attached to you. 777 00:41:53,594 --> 00:41:54,510 So I won't prove that. 778 00:41:54,510 --> 00:41:56,820 It's a little tricky to prove, but it's fairly easy 779 00:41:56,820 --> 00:41:57,400 to compute. 780 00:41:57,400 --> 00:41:59,200 And you could actually do it in the same amount of time. 781 00:41:59,200 --> 00:42:00,790 As you're building this thing up, 782 00:42:00,790 --> 00:42:02,694 you can do the color coding to figure out 783 00:42:02,694 --> 00:42:04,860 which things are in the same component, which things 784 00:42:04,860 --> 00:42:07,880 are in different components. 785 00:42:07,880 --> 00:42:09,820 Let's see. 786 00:42:09,820 --> 00:42:17,110 So another fun fact is this little part. 787 00:42:17,110 --> 00:42:20,870 This says it's the 2k minus 3 property. 788 00:42:20,870 --> 00:42:25,130 The same algorithm you could use to check 5k minus 27, 789 00:42:25,130 --> 00:42:29,960 or whatever you want, for fixed numbers like two and three, 790 00:42:29,960 --> 00:42:33,960 the same pebble algorithm can detect 791 00:42:33,960 --> 00:42:37,256 that ak minus b property. 792 00:42:37,256 --> 00:42:39,630 And that's actually useful for a lot of different things. 793 00:42:39,630 --> 00:42:42,550 This is done originally by Lee and Streinu. 794 00:42:42,550 --> 00:42:47,000 Same lee, and Streinu we'll be seeing 795 00:42:47,000 --> 00:42:51,460 some of her results in a couple of classes as well. 796 00:42:51,460 --> 00:42:59,970 For example-- so this is that-- 3D body and bar. 797 00:42:59,970 --> 00:43:02,410 So actually let me show you the kind 798 00:43:02,410 --> 00:43:04,610 of scenario we're thinking about. 799 00:43:04,610 --> 00:43:06,140 So I mentioned 3D. 800 00:43:06,140 --> 00:43:11,050 If we have vertices and bars between them, 801 00:43:11,050 --> 00:43:13,950 we don't know how to characterize generic rigidity. 802 00:43:13,950 --> 00:43:16,710 But a slightly different problem, which is 3D bodies, 803 00:43:16,710 --> 00:43:18,880 these are polyhedron. 804 00:43:18,880 --> 00:43:22,380 And they have bars connected between them. 805 00:43:22,380 --> 00:43:27,600 This we know how to solve in 3D and in any dimension. 806 00:43:27,600 --> 00:43:32,600 And so this is a picture of not only having-- 807 00:43:32,600 --> 00:43:35,430 so their bodies can spin unlike vertices. 808 00:43:35,430 --> 00:43:36,410 Vertices can't rotate. 809 00:43:36,410 --> 00:43:38,182 Nothing happens when you rotate a vertex. 810 00:43:38,182 --> 00:43:39,890 Bodies have this extra degree of freedom. 811 00:43:43,567 --> 00:43:45,400 So there are two things we're allowing here, 812 00:43:45,400 --> 00:43:48,010 one is to add a hinge between two bodies 813 00:43:48,010 --> 00:43:50,000 and the other is to add bars connecting them 814 00:43:50,000 --> 00:43:51,410 from various random points. 815 00:43:51,410 --> 00:43:54,050 And it's generic, so these points will never coincide. 816 00:43:54,050 --> 00:43:56,600 I think that's what makes this different from a vertex. 817 00:43:56,600 --> 00:43:58,250 Vertex bars always coincide. 818 00:43:58,250 --> 00:44:01,090 Here, they all just attach to generic points. 819 00:44:01,090 --> 00:44:05,470 So it turns out you can simulate a hinge by five bars. 820 00:44:05,470 --> 00:44:07,680 They're equivalent. 821 00:44:07,680 --> 00:44:13,235 So both of these can be captured by 6K minus 6 property. 822 00:44:13,235 --> 00:44:15,360 Turns out these things will be generically rigid if 823 00:44:15,360 --> 00:44:17,850 and only if you satisfy the 6K minus 6 property 824 00:44:17,850 --> 00:44:21,930 and you have exactly 6K minus 6 bars. 825 00:44:21,930 --> 00:44:27,150 And this is proved by two or three people. 826 00:44:27,150 --> 00:44:30,020 I mean you need to add two results together, 827 00:44:30,020 --> 00:44:33,130 one from the '90s and one from much older, 828 00:44:33,130 --> 00:44:34,900 I think, in graph theory. 829 00:44:34,900 --> 00:44:41,260 But in particular, Tae was involved from 1984. 830 00:44:41,260 --> 00:44:41,919 And it's funny. 831 00:44:41,919 --> 00:44:44,460 The paper starts out with, if you ask any structural engineer 832 00:44:44,460 --> 00:44:45,959 if you have two bodies how many bars 833 00:44:45,959 --> 00:44:48,716 you have to add to rigidify them, they will say six. 834 00:44:48,716 --> 00:44:50,090 I'm like, OK, I didn't know that. 835 00:44:50,090 --> 00:44:52,130 But six is the right answer. 836 00:44:52,130 --> 00:44:56,340 And that's why the 6K minus 6 basically. 837 00:44:56,340 --> 00:44:58,340 And and we can use this pebble algorithm 838 00:44:58,340 --> 00:45:01,240 to solve that for free basically. 839 00:45:01,240 --> 00:45:04,380 And this is actually implemented here 840 00:45:04,380 --> 00:45:05,660 in the same kind of software. 841 00:45:05,660 --> 00:45:09,910 I'll just run it quickly because it's a lot of pebbles. 842 00:45:09,910 --> 00:45:12,910 Every vertex has six pebbles. 843 00:45:12,910 --> 00:45:15,370 You just keep going. 844 00:45:15,370 --> 00:45:22,930 You need to cover every edge with how many pebbles? 845 00:45:22,930 --> 00:45:25,440 Before it was four, so now it should be 7, 846 00:45:25,440 --> 00:45:29,460 I believe, one more than the six here. 847 00:45:29,460 --> 00:45:32,060 So 6k minus 6. 848 00:45:32,060 --> 00:45:35,570 Anyway, this graph, while it's not obvious, 849 00:45:35,570 --> 00:45:37,850 is minimally rigid in this world. 850 00:45:37,850 --> 00:45:42,570 And it corresponds exactly to the left example. 851 00:45:42,570 --> 00:45:45,425 It's hard to see because we've replaced the hinges here 852 00:45:45,425 --> 00:45:47,590 by six bars. 853 00:45:47,590 --> 00:45:51,290 So that's why we got all the six-- all the duplicated edges. 854 00:45:51,290 --> 00:45:53,870 Here, you see the duplicated are different from a rigidity 855 00:45:53,870 --> 00:45:56,490 standpoint because having three edges between the same pair 856 00:45:56,490 --> 00:45:59,970 of objects is no longer just the same as having one edge 857 00:45:59,970 --> 00:46:02,310 because they attach to different points. 858 00:46:02,310 --> 00:46:03,070 Each one can spin. 859 00:46:03,070 --> 00:46:05,170 These are universal joints by the way. 860 00:46:05,170 --> 00:46:08,510 So these bars can rotate around the body. 861 00:46:08,510 --> 00:46:09,540 The body can spin. 862 00:46:09,540 --> 00:46:10,940 Lots of things can happen. 863 00:46:10,940 --> 00:46:12,760 But this is enough to rigidify. 864 00:46:12,760 --> 00:46:15,940 Is there a question? 865 00:46:15,940 --> 00:46:16,480 Cool. 866 00:46:16,480 --> 00:46:17,646 I'm not going to prove that. 867 00:46:17,646 --> 00:46:20,635 You can read the papers if you're interested. 868 00:46:20,635 --> 00:46:21,510 But it's interesting. 869 00:46:21,510 --> 00:46:26,470 Bodies and bars are so much easier than other things. 870 00:46:26,470 --> 00:46:29,680 One other thing you can do is called angular rigidity. 871 00:46:29,680 --> 00:46:33,920 This is a fairly new result by same people. 872 00:46:33,920 --> 00:46:36,350 If you have a bunch of lines in 3D, and you 873 00:46:36,350 --> 00:46:37,550 have angular constraints. 874 00:46:37,550 --> 00:46:40,060 In this case, every triple of these lines 875 00:46:40,060 --> 00:46:42,720 has an angular constraint that it must be equal to alpha. 876 00:46:42,720 --> 00:46:44,820 That's what's drawn on this spherical picture. 877 00:46:44,820 --> 00:46:46,660 Over here, we have two bodies. 878 00:46:46,660 --> 00:46:47,810 So here we have lines. 879 00:46:47,810 --> 00:46:49,310 Here, we have bodies. 880 00:46:49,310 --> 00:46:52,890 And there are three constraints that 881 00:46:52,890 --> 00:46:57,600 fix the angles between how the angles meet at these bodies. 882 00:46:57,600 --> 00:47:00,960 And they claim is that both of these are angularly rigid, 883 00:47:00,960 --> 00:47:03,950 meaning things can still slide up and down, 884 00:47:03,950 --> 00:47:06,560 but the angles are all fixed. 885 00:47:06,560 --> 00:47:10,040 And you can test this again. 886 00:47:10,040 --> 00:47:13,490 This case actually turns out it's the 2k minus 3 property 887 00:47:13,490 --> 00:47:15,370 again, same as Laman. 888 00:47:15,370 --> 00:47:17,304 This one, I've forgotten. 889 00:47:17,304 --> 00:47:17,970 I have to check. 890 00:47:17,970 --> 00:47:21,440 I think it's 3k minus 3. 891 00:47:21,440 --> 00:47:23,350 Yeah, 3k minus 3. 892 00:47:23,350 --> 00:47:25,440 So cool things. 893 00:47:25,440 --> 00:47:27,580 One last question. 894 00:47:27,580 --> 00:47:28,730 Connected banana. 895 00:47:28,730 --> 00:47:33,340 So there's this three banana example-- or two banana 896 00:47:33,340 --> 00:47:33,840 example. 897 00:47:33,840 --> 00:47:37,007 I'm getting ahead of myself-- which was weird. 898 00:47:37,007 --> 00:47:39,590 You have this one banana on the left, one banana on the right. 899 00:47:39,590 --> 00:47:43,290 And there's this implicit, implied hinge, as they call it, 900 00:47:43,290 --> 00:47:44,329 between the two points. 901 00:47:44,329 --> 00:47:46,370 The whole thing is flexible, but if you check it, 902 00:47:46,370 --> 00:47:47,860 it satisfies the Lama condition. 903 00:47:47,860 --> 00:47:50,930 It satisfies 3k minus 6, which is 904 00:47:50,930 --> 00:47:53,840 what it should be for 3D rigidity. 905 00:47:53,840 --> 00:47:55,830 This is a 3D. 906 00:47:55,830 --> 00:47:58,250 Now, this graph is-- seems trivial-- I 907 00:47:58,250 --> 00:48:00,530 mean it seems easy to figure out that this is flexible 908 00:48:00,530 --> 00:48:02,010 because there's a two cut. 909 00:48:02,010 --> 00:48:04,040 There are two vertices you can remove 910 00:48:04,040 --> 00:48:06,430 that disconnect the graph into two pieces. 911 00:48:06,430 --> 00:48:09,580 So if you could just subdivide, do the left part separately 912 00:48:09,580 --> 00:48:12,930 from the right part, you should be able to figure this out. 913 00:48:12,930 --> 00:48:15,650 Unfortunately, this example can be made more connected, 914 00:48:15,650 --> 00:48:17,690 and that's what the question was. 915 00:48:17,690 --> 00:48:20,740 So this is an old example by Henry Crapo. 916 00:48:23,690 --> 00:48:26,600 A modification by Walter Whiteley 917 00:48:26,600 --> 00:48:29,740 is that if you add a single point here and attach it 918 00:48:29,740 --> 00:48:33,380 to those two points-- sorry, those three points-- 919 00:48:33,380 --> 00:48:37,550 this will be three connected, still be flexible, and still 920 00:48:37,550 --> 00:48:40,835 satisfy Laman because we added three edges and one vertex, 921 00:48:40,835 --> 00:48:43,990 so it still satisfies Laman. 922 00:48:43,990 --> 00:48:44,850 So that sucks. 923 00:48:44,850 --> 00:48:46,670 We think, oh, maybe four connected. 924 00:48:46,670 --> 00:48:49,470 Well, you can make it four connected, too, 925 00:48:49,470 --> 00:48:51,500 by adding a triangle in the center 926 00:48:51,500 --> 00:48:55,720 and connecting these six, adding these 6 connections. 927 00:48:55,720 --> 00:48:57,690 Well, what about 5 connected? 928 00:48:57,690 --> 00:48:59,940 Well, five connected, you can also do. 929 00:48:59,940 --> 00:49:03,670 And this is an example called the banana spider. 930 00:49:03,670 --> 00:49:05,400 Although it seems a bit of a misnomer. 931 00:49:05,400 --> 00:49:07,710 It should be-- but I guess banana spiders 932 00:49:07,710 --> 00:49:10,060 are actual object-- actual species. 933 00:49:10,060 --> 00:49:11,620 This really should be a banana insect 934 00:49:11,620 --> 00:49:14,760 because this guy has six legs, three 935 00:49:14,760 --> 00:49:16,640 on the left, three on the right. 936 00:49:16,640 --> 00:49:18,842 So if it is an octahedron in the center, 937 00:49:18,842 --> 00:49:20,550 and then you add these three connections, 938 00:49:20,550 --> 00:49:23,490 and you can actually prove that any graph you have, 939 00:49:23,490 --> 00:49:27,480 any example that's maybe only one or two or three connected, 940 00:49:27,480 --> 00:49:30,770 whatever, you can make it five connected by whenever you have 941 00:49:30,770 --> 00:49:33,650 two four connected components-- or five things components 942 00:49:33,650 --> 00:49:37,800 I guess-- just add a spider in the middle to bridge them, 943 00:49:37,800 --> 00:49:40,210 and it will be as flexible as before. 944 00:49:40,210 --> 00:49:41,960 And it will still satisfy Laman. 945 00:49:41,960 --> 00:49:46,549 So five connectivity doesn't buy you anything unfortunately. 946 00:49:46,549 --> 00:49:48,340 I guess you could ask for six connectivity, 947 00:49:48,340 --> 00:49:51,840 but six connectivity, I think, is impossible 948 00:49:51,840 --> 00:49:53,955 because you only have 3n minus 6 edges. 949 00:49:56,530 --> 00:49:58,220 That's the limit. 950 00:49:58,220 --> 00:50:01,070 So sadly, connectivity is not the right-- doesn't buy us 951 00:50:01,070 --> 00:50:02,160 anything. 952 00:50:02,160 --> 00:50:09,160 And that's what we know about vertex and bar structures in 3D 953 00:50:09,160 --> 00:50:09,800 sadly. 954 00:50:09,800 --> 00:50:11,990 Tough open problem. 955 00:50:11,990 --> 00:50:15,400 Any questions? 956 00:50:15,400 --> 00:50:17,900 That's it for today.