Hello everybody, welcome back to the data structure and algorithms specialization. Here I just want to give you a brief heads up, about what we're going to be talking about in the next two lectures. So, in the next two lectures, we're going to dive right in. We're going to look into a couple of algorithms problems, in particular we're going to talk about algorithms for computing Fibonacci numbers And algorithms for computing greatest common divisors. Now these might be, feel a little bit weird for the very first algorithms that we're going to talk to in a class. They're kind of number theoretic and numerical, and they won't actually be that similar to what we'll be talking about in the rest of the class. So you might wonder why we're looking at them, and what you should be paying attention to. And that's really what I want to talk to you today about. In particular, these two topics were chosen, because they were the clearest examples we could think of for why algorithms are critically important. Why coming up with a good algorithm is really so important on so many problems. And in particular, both of these problems have the following very interesting properties. To begin with, both of these problems have a pretty straightforward algorithm. One where you sort of take the definition of the problem that you're trying to solve. And from that you more or less immediately extract an algorithm. You sort of take the words that you have, and you sort of interpret them as an algorithm. And more or less immediately you have some code, and it works. And it computes the things that you want it to compute. Unfortunately, in both cases, these very straightforward algorithms are far, far too slow. You end up with algorithms that take thousands of years to run, even on very modest inputs. And this is not acceptable for practical purposes, you don't have millenia to wait for your computation to finish. And so you need something better, and it turns out in both of this cases there is something better. There is going to be a slightly more complicated algorithm, something that maybe requires one or two bright ideas to get it to work. This slightly more complicated algorithm, works fine and is actually incredibly fast. You can handle sort of any reasonable instance of these problems in the blink of an eye. And so, the whole point of this is to really show with these very concrete examples, that at least in these instances, and in many others that we'll see throughout the course, finding the right algorithm can make all the difference in the world. It's the difference between having an algorithm that takes more time than you will have in your life to finish, and an algorithm that is done before you even knew it started. And so really this is what you should be paying attention to. Why it is so, so important that we find good algorithms. So that's what's coming up, I hope you enjoy the next couple of lectures.