Hal ini memotivasi konsep tentang problem yang sulit untuk kelas yang rumit. Sebuah masalah X sulit untuk satu kelas masalah C jika setiap masalah di C dapat dikurangi menjadi X. Jadi tidak ada masalah dalam C lebih sulit daripada X, karena algoritma untuk X memungkinkan kita untuk memecahkan masalah apapun di C. Tentu saja, gagasan dari masalah-masalah sulit tergantung pada tipe pengurangan yang digunakan. Untuk kelas kompleksitas yang lebih besar dari P, pengurangan waktu polinomial biasanya digunakan. Secara khusus, set masalah yang sulit untuk NP adalah set masalah NP-keras.
Algoritma untuk X yang mengurangi C akan kita lakukan untuk melakukan apa?
memecahkan masalah apapun di C memecahkan masalah apapun di C memecahkan masalah apapun di C