Bisher ausgewählte Probleme für die (sehr) effiziente Algorithmen existieren (Selection Bias).
Aber es gibt auch viele Probleme, für die es (noch?) keine effizienten Algorithmen gibt.
Eingabe: Ein verbundener ungerichteter Graph $G = (V, E)$ und (reel-wertige) Kosten $c_e$ für jede Kante $e\in E$
Ausgabe: Ein aufspannender Baum (spanning tree) $T \subseteq E$ von $G$ mit minimaler Summe $\sum_{e\in T} c_e$ von Kantenkosten.
Einfache greedy-Algorithmen lösen das MST-Problem effizient:
Beispiel:
Prim-Algorithmus¶Eingabe: Ein verbundener ungerichteter Graph $G = (V, E)$ und (reel-wertige) Kosten $c_e$ für jede Kante $e\in E$
Ausgabe: Die Kanten eines aufspannender Baum (spanning tree) $T \subseteq E$ von $G$ mit minimaler Summe.
// Initialization
$X:= \{s\}$//sis an arbitrarily chosen vertex
$T := \emptyset $\\ invariant: the edges in$T$span$X$
// Main loop
while there is an edge $(v, w)$ with $v \in X, w \notin X$ do
$(a, b) :=$ a minimum-cost such edge
add verted $b$ to $X$
add edge $(a,b)$ to $T$
return $T$
Der einfache greedy-Algorithmus liefert (immer) eine optimale Lösung des MST-Problems. Beweis siehe z.B. T. Roughgarden, Algorithms Illuminated, Part 3: Greedy Algorithms and Dynamic Programming
Eingabe: Ein vollständig-verbundener ungerichteter Graph $G = (V, E)$ und (reel-wertige) Kosten $c_e$ für jede Kante $e\in E$
Ausgabe: Eine Tour $T \subseteq E$ von $G$ mit minimaler Summe $\sum_{e\in T} c_e$ von Kantenkosten.
Eine Tour ist ein Zyklus, der jeden Knoten exakt-einmal besucht.
Wieviele unterschiedliche Touren gibt es?
Anwendungen, bei denen verschiedene Aufgaben hintereinander ausgeführt werden sollen. Dabei hängen die Kosten einer Aufgabe von der vorherigen Aufgabe ab, z.B. Minimierung der Umkonfigurierungskosten einer Auto-Fabrik, in der verschiedene Auto-Typen hergestellt werden sollen.
Ein berechenbares Problem ist in polynominaler Zeit lösbar, wenn es einen Algorithmus gibt, der für jede Eingabe eine korrekte Ausgabe in polynominaler Zeit findet.
Bei festem Zeitbudget, skalieren die Eingabemenge $n$ bei einer Verdopplung der Rechenresourcen mit einem festen Faktor, d.h. der Faktor ist unabhängig von $n$.
Hinweis: Die Verdopplung der Rechenresourcen ist äquivalent zu Halbierung der Konstante $C$.
Beispiele:
d.h. bei $O(n^2)$ skaliert die Eingabemenge mit $1.414$ bei Verdopplung der Rechenresourcen.
analog
p_vs_np()
Wenn die Lösung eines berechenbares Problem in polynominaler Zeit überprüfbar ist, dann ist das Problem in NP (non-deterministic polynominal).
Dies ist äquivalent dazu, dass ein Problem von einer nicht-deterministischen Turing-Maschine in polynominaler Laufzeit gelöst werden kann. Daher nicht-deterministisch polynominal (NP) lösbar.
Beispiel:
Informale Beschreibung:
Ein Problem ist NP-hart, wenn es wenigstens genauso-schwierig ist, wie jedes Problem in $NP$ , d.h. jedes Problem mit einfach zu bestätigender Lösung.
Die Überprüfung einer vermeintlichen Lösung eines Problems kann fundamental einfacher sein, als die Lösung zu finden.
Ein berechenbares Problem ist NP-hart, wenn die Entwicklung eines polynominalen Algorithmus für dieses die P $\neq$ NP Vermutung wiederlegen würde.
Falls die P $\neq$ NP Vermutung gilt für die Komplexitätsklassen:
Folgendes gilt, falls die P $\neq$ NP Vermutung wahr ist:
Beispiel Weighted-Independent Set Problem (MWIS):
Heuristische Algorithmen
Wie kann gezeigt werden, dass ein Problem zur Klasse NP-hart dazugehört.
Definition:
Ein Problem $A$ reduziert sich auf ein Problem $B$, wenn ein Algorithmus, der $B$ löst, sich auch auf das Problem $A$ anwenden (übersetzen) lässt. Ein Subroutine, die $B$ löst, wird dabei nur maximal polynominal oft vom Lösungsalgorithmus für $A$ aufgerufen.
Hinweis: Es kann effizientere Algorithmen zum Lösen des Problems geben, als die Reduktion.
Wenn sich Problem $A$ auf $B$ reduzieren lässt, dann heißt dies, dass die praktische Anwendbarkeit (Tractability) von $B$ die Tractability von $A$ induziert:
Wenn sich Problem $A$ auf $B$ reduzieren lässt und $A$ NP-hart ist, dann ist $B$ auch NP-hart:
Um zu beweisen, dass ein Problem $B$ NP-hart ist: