Dieser Artikel von Wikipedia ist u.U. veraltet. Die neue Version gibt es hier. Achtung: Dieser Artikel setzt Fachwissen voraus welches nicht in Kürze dargelegt werden kann. Der sollte zum Verständnis wenigstens mit den Begriffen Turingmaschine Entscheidungsproblem Algorithmus Polynomialzeit-Algorithmus Polynomialzeit-Reduktion und formale Sprache ausreichend vertraut sein. Der Begriff NP-Vollständigkeit ist ein Begriff aus der Komplexitätstheorie der theoretischen Informatik . Er klassifiziert eine Menge von Entscheidungsproblemen die in gewisser Hinsicht besonders schwierig und für die angenommen wird dass keine effizienten Algorithmen existieren die diese lösen.
Genau so wird dies natürlich nicht häufig für konkrete Probleme gezeigt weil es schwierig ist eine Aussage für beliebige Probleme NP zu zeigen. Vielmehr nimmt man ein für das die NP-Vollständigkeit schon bekannt ist reduziert es auf dasjenige Problem für das die Eigenschaft der NP-Vollständigkeit zeigen will. Aus Transitivität von Polynomialzeitreduktionen folgt dann dass alle Probleme aus NP auch auf das betrachtete Problem reduzierbar
Klassische Vertreter NP-vollständiger Probleme sind etwa
Der Begriff NP-Vollständigkeit ist nur für Entscheidungsprobleme definiert also Probleme die sich auf das Wortproblem einer Sprache zurückführen lassen. Für Optimierungsprobleme und Suchprobleme gibt es den Begriff der NP-Äquivalenz.
Probleme die in NP liegen lassen weiter in ihrer Komplexität unterteilen je nach wie gut sie sich approximativ lösen lassen. Das Graphen-Färbungsproblem läßt sich nur sehr schlecht approximativ lösen während andere beliebig gut mittels so genannten Approximationsschemata approximieren
Weiter kann man die NP-vollständigen Probleme einteilen in
stark NP-vollständige und
schwach NP-vollständige Probleme
Bleibt das Problem auch noch mit Kodierung der Eingabe NP-vollständig so heißt das stark NP-vollständig ansonsten schwach NP-vollständig . Eine alternative Definition besagt dass es schwach NP-vollständige Probleme so genannte pseudopolynomielle Algorithmen gibt für stark NP-vollständige Probleme dagegen nicht. Algorithmen bei denen der Laufzeitschranke eine Zahl vorkommt die nicht von der Eingabelänge abhängt nennt man pseudopolynomiell da die Laufzeit nicht zwangsläufig polynomiell muss - etwa wenn diese Zahl so wird dass sie exponentiell in der Eingabelänge
Probleme dieser Problemklasse haben die unangenehme dass die Rechenzeit bei zunehmender Datenmenge rasch astronomische steigt. Eine vollständige und optimale Lösung daher bestenfalls für kleine Datenmengen zu erreichen. Rahmen der Software-Entwicklung folgt man drei Lösungsansätzen ein solches Problem anzuprogrammieren:
Man schreibt tatsächlich einen optimalen Algorithmus geht davon aus dass die zu verarbeitende Datenmenge in einem Bereich bleibt der klein genug um die Lösung abzuwarten.
Man wählt einen heuristischen Algorithmus also ein System und sucht nicht nach einer optimalen sondern nur nach einer Lösung die für konkrete Aufgabe gut genug ist.
Man wählt einen approximativen Algorithmus der die perfekte Lösung aber eine nahezu perfekte bietet.