This course has 7 units, and I'm now going to give you a brief overview of what we have planned.
The first 3 units will introduce you to challenging problems,
and I'm going to do this by telling you about some problems
that are really relevant in practice, yet very, very hard to solve.
We're also going to do a bit of the formal background of challenging problems
through a concept known as NP-completeness.
And I'm going to show you how to recognize NP-completeness
so that you'll be able to develop an intuition when you encounter a challenging problem.
So the first 3 units are basically about recognizing the hardness of a problem.
In units 4 to 6 we are then going to discuss what to do if you encounter a hard problem,
because, as I told you in the beginning, many people,
once they've recognized that their problem is hard to solve, actually tend to stop.
And these units here will give you various techniques for solving hard problems.
Solving them very exactly using techniques such as optimized search trees and pre-processing,
but also solving them almost optimally using techniques such as approximation and randomization.
So this will give you an aresenal of tools that you can use to try
and tackle any hard problem, should you encounter it.
And then in the final unit we'll be going into computability and talk about unsolvable problems,
problems that no computer can ever solve,
and how you could solve them, nevertheless, if you come across them.
