Algorithms Illuminated (Part 4): Algorithms for NP-Hard Problems