Mange kompleksitetsklasser er definert ved bruk av reduksjoner. En reduksjon av et problem er å transformere problemet til et liknende problem. Uformelt sier man at problemet må være minst like vanskelig som et annet problem. Dette er svært nyttig for å finne ei løsning på ulike problemer. Hvis et problem X kan løses ved bruk av en algoritme for et problem Y, vil X ikke være et hardere problem enn Y og man sier dermed at X kan reduseres til Y. Det finnes mange ulike måter å gjøre reduksjoner på, men en av de mest brukte er polynomielltidsreduksjoner.