P, NP, and NP-Completeness: The Basics of Complexity Theory