This document introduces algorithms that are polynomial time versus non-polynomial time and defines NP-complete problems. It discusses that NP-complete problems include Satisfiability (SAT), Traveling Salesman, Knapsack and Clique problems. These problems are difficult to solve in polynomial time and are mapped to each other through polynomial time reductions. While we can solve them in exponential time, finding a polynomial time algorithm would mean P=NP.