We can use the notion of efficient algorithms to categorize problems: a hard problem is one that has no efficient (polynomial-time) algorithm.
A natural question to ask is: are there any hard problems?
Yes. You can study them (EXP-hard problems) in detail in the complexity course (offered next year).
Amazingly, there is a huge class of important problems whose status as hard or easy is unknown. All we know is that they are all easy or all hard!
These are the NP-complete problems. Today will be a quick survey of why these problems are important in the study of algorithms. Next time we'll look at developing algorithms for NP-complete problems.