¨Ubung Theoretische Informatik I

Werbung
Übung Theoretische Informatik I
L. Priese, M. Schuth,
R. Menzel, E. Hebisch
Aufgabe 1
SS 2005
Blatt 12, Abgabe bis Freitag den 29.07.05
NP-Vollständigkeit
4 Punkte
Beweisen Sie, dass folgende Probleme NP-vollständig sind.
a) Independent Set
Gegeben: Graph G = (V, E) und K ∈ N mit K ≤ |V |.
Frage: Gibt es eine unabhängige Menge von Knoten V 0 ⊆ V mit |V 0 | ≥ K?
Hinweis: Eine Menge V 0 von Knoten ist unabhängig, wenn gilt:
∀u, v ∈ V 0 : u 6= v ⇒ (u, v) ∈
/E
IS ∈ N P : Eine indeterminierte Turingmaschine kann eine Menge V 0 ⊆ V mit |V 0 | ≤ K
raten und in max. O(n3 ) Schritten überprüfen, ob die Knoten unabhängig sind. Sie betrachtet dazu jedes Paar (v, v 0 ) (das ist in O(n2 )) und vergleicht jedes Paar in E mit
(v, v 0 ). Das ist dann insgesamt in O(n3 ).
Wir reduzieren Clique auf IS:
/ E.
Sei G = (V, E) mit ∀u, v : (u, v) ∈ E ⇔ (u, v) ∈
Dann transformieren wir Clique in IS:
f (< G, K >) =< G, K > denn
V 0 ist Clique in G
⇔ ∀u, v ∈ V 0 : (u, v) ∈ E
⇔ ∀u, v ∈ V 0 : (u, v) ∈
/E
⇔ alle Knoten von V 0 sind unabhängig in G
⇔ (G, K) ist IS.
b) Partition into Hamiltonian Subgraphs (PIHS)
Gegeben: Graph G = (V, E) und K ∈ N mit K ≤ |V |.
Frage: Können die Knoten von G in k ≤ K disjunkte Mengen V1 , ..., Vk aufgeteilt werden, so dass Vi für 1 ≤ i ≤ k einen Hamilton-Kreis enthält?
Hinweis: Die Mengen V1 , ..., Vk sind disjunkt, wenn kein Element v in mehr als einer Menge
vorkommt.
PIHS ist in NP:
Eine indeterminierte TM kann eine Aufteilung für die Knoten raten, dann eine Knotenfolge raten und in polynomieller Zeit überprüfen, ob diese Knotenfolge in G einen Kreis
bildet.
Reduktion auf Hamiltonkreis:
Wir geben f : Hamiltonkreis → P IHS an mit
f (G) = (G, 1).
Sei G = (V, E) (G, 1) ∈ P IHS
⇔ V1 = V enthält einen Hamiltonkreis
⇔ G ∈ Hamiltonkreis
Aufgabe 2
Komplexität
4 Punkte
Gegeben sei eine n×n-Matrix M = (mi,j )i≤n,j≤n über den natürlichen Zahlen, wobei jede Zeile
und Spalte geordnet sei, d.h. für alle zulässigen Werte von i und j gelte jeweils mi,j ≤ m(i+1),j
und mi,j ≤ mi,(j+1) . Bestimmen Sie einen möglichst effektiven Algorithmus um festzustellen,
ob eine bestimmte Zahl k ∈ N in der Matrix M vorkommt, und berechnen Sie die Anzahl der
Rechenschritte, die Ihr Algorithmus schlimmstenfalls benötigt.
Der (vermutlich) effektivste Algorithmus arbeitet wie folgt: Man beginnt an der unteren linken
Ecke (wahlweise auch an der oberen rechten Ecke) der Matrix. Ein Vergleich der hier stehenden
mit der gesuchten Zahl führt zu einem von drei möglichen Ergebnissen. Stimmen die Zahlen
überein, so terminiert der Algorithmus mit Antwort ja. Ist die gesuchte Zahl größer als die
gefundene, geht man auf das Matrixfeld rechts vom aktuellen Feld, sonst auf das Feld darüber.
Dann beginnt der Algorithmus von vorn, wieder mit dem Vergleich. Verläßt man irgendwann
die Matrix nach rechts oder oben, terminiert der Algorithmus mit Antwort nein.
Man man sich hier zunutze, daß oberhalb von jeder Zahl nur kleinere, rechts von jeder Zahl
nur größere Zahlen stehen.
Rechenschritte: Wir zählen jeden Vergleich als eine Operation. Dann braucht man höchstens
2n Schritte, d.h. der Algorithmus liegt in O(n).
Herunterladen