np-vollständige Probleme - Erbschaftsproblem/Partition

Werbung
Algorithmen und
Komplexität
Thema:
NP-vollständige Probleme
Erbschaftsproblem (Partition)
von Jörg Winkler
17. Juli 2003
Inhaltsverzeichnis
1 GRUNDLEGENDES ZUM ERBSCHAFTSPROBLEM ..............3
1.1
1.2
1.2.1
1.2.2
1.2.3
PROBLEMVORSTELLUNG ............................................................................. 3
DEFINITIONEN ........................................................................................... 4
Die Klasse P ...................................................................................................................... 4
Die Klasse NP.................................................................................................................... 4
Die NP-Vollständigkeit...................................................................................................... 4
2 NP-VOLLSTÄNDIGKEIT WICHTIGER PROBLEME...............5
2.1
3SAT-PROBLEM ........................................................................................ 6
2.1.1
2.1.2
Allgemein ........................................................................................................................... 6
Beweis der NP-Vollständigkeit .......................................................................................... 6
2.2 RUCKSACK-PROBLEM (KP)........................................................................ 7
2.2.1 Allgemein ........................................................................................................................... 7
2.2.2 Beweis der NP-Vollständigkeit .......................................................................................... 7
2.3 ERBSCHAFTSPROBLEM (PARTITION)............................................................ 9
2.3.1 Allgemein ........................................................................................................................... 9
2.3.2 Beweis der NP-Vollständigkeit .......................................................................................... 9
2.4 BIN PACKING PROBLEM (BPP) ................................................................ 10
2.4.1 Allgemeines...................................................................................................................... 10
2.4.2 Beweis der NP-Vollständigkeit ........................................................................................ 10
2.5 ZUSAMMENHANG ..................................................................................... 10
3 LÖSUNG / STRATEGIEN ..........................................................11
3.1
ALLGEMEIN ............................................................................................. 11
3.1.1
3.1.2
3.1.3
zum Zahlenbeispiel (1.1.)................................................................................................. 11
Zusammenfassung............................................................................................................ 12
besseres Beispiel.............................................................................................................. 12
3.2 LÖSUNG MIT HILFE DES BPP ................................................................... 13
3.3 STRATEGIE DER RÜCKVERFOLGUNG ......................................................... 13
3.3.1 Voraussetzung.................................................................................................................. 13
3.3.2 Vorgehensweise ............................................................................................................... 13
3.3.3 Eigenschaften................................................................................................................... 13
3.3.4 Anschauungsbeispiel ....................................................................................................... 14
4 ZUSAMMENFASSUNG .............................................................16
2
1
Grundlegendes zum Erbschaftsproblem
1.1 Problemvorstellung
Das Erbschaftsproblem ist auch unter dem englischen Begriff Partition verbreitet. Es
stellt einen Spezialfall des Bin Packing Problem (BPP) dar, wobei Bin Kiste, Eimer
oder Behälter und Packing packen oder verpacken bedeuten kann. Wie wir hier
erkennen können, geht es darum ob Objekte in Behälter zu packen. Der
Hauptunterschied beider Probleme besteht darin, dass beim Erbschaftsproblem nur zwei
Behälter zu Verfügung stehen. Wie auch das BPP, ist das Erbschaftsproblem nicht nur
ein theoretisches Problem, sondern hat durchaus auch praktische Relevanz.
•
Zum Beispiel:
Jemand hinterlässt seinen zwei Erben n Gegenstände. Die Erbstücke sind jedoch
unterschiedlich viel Wert. Gibt es eine Aufteilung, so dass beide Erben den gleichen
Wert erhalten?
Dieses Erbschaftsproblem sieht harmlos aus, jedoch sind bis heute keine Algorithmen
bekannt, die im allgemeinen Fall eine Lösung, sofern sie existiert, in weniger als
exponentiell vielen Schritten liefert.
•
Hier ein Zahlenbeispiel:
Für das Erbschaftsproblem betrachte man folgende 20 natürlichen Zahlen:
32, 35, 40, 41, 44, 46, 51, 59, 60, 64
72, 75, 76, 78, 80, 85, 86, 89, 92, 95
Die Summe ist 1300. Man stelle also fest, ob es eine Teilfolge dieser Zahlen gibt, deren
Summe 650 ist.
Bei diesem Beispiel ist es nicht schwer, mit Probieren nach einigen Minuten eine
Lösung zu finden:
T1 = {32, 40, 41, 59, 60, 64, 80, 85, 92, 95}
T2 = {35, 44, 46, 51, 72, 75, 76, 78, 86, 89}
Im späteren Verlauf werden wir noch einmal auf dieses Beispiel zurückkommen.
3
1.2 Definitionen
1.2.1 Die Klasse P
M sei eine deterministische Turingmaschine auf dem Eingabealphabet ∑. Die worst
case Rechenzeit tM(n) ist die maximale Anzahl von Rechenschritten, die M auf
Eingaben der Länge n aus ∑M macht.
P ist die Klasse der Probleme, für die es eine deterministische Turingmaschine M gibt,
deren worst case Rechenzeit polynomiell beschränkt ist.
1.2.2 Die Klasse NP
M sei eine nichtdeterministische Turingmaschine, die die Sprache L akzeptiert. Die
Rechenzeit für eine Eingabe ω ist, falls ω ∈ L, gleich der Anzahl der Rechenschritte auf
einem kürzesten akzeptierenden Rechenweg, und 0, falls ω ∉ L. Die worst case
Rechenzeit tM(n) ist das Maximum der Rechenzeiten für alle Eingaben ω der Länge n.
NP (nichtdeterministisch polynomiell) ist die Klasse der Entscheidungsprobleme, für
die es eine nichtdeterministische Turingmaschine M gibt, deren worst case Rechenzeit
polynomiell beschränkt ist.
1.2.3 Die NP-Vollständigkeit
Es seien L1 und L2 Sprachen über ∑1 und ∑2. Dann heißt L1 polynomiell auf L2
reduzierbar, Notation L1 ≤p L2, wenn es eine polynomielle Transformation von L1 nach
L2 gibt. D.h. wenn es eine von einer nichtdeterministischen Turingmaschine in
polynomieller Zeit berechenbare Funktion f: ∑1* → ∑2* gibt, so dass für alle ω∈ ∑1*
gilt:
ω ∈ L1
f(ω) ∈ L2 .
4
2 NP-Vollständigkeit wichtiger Probleme
Die wichtigsten Probleme sind folgende:
SAT
3SAT
Cliquen
KP
gerichteter
Hamilton
Kreis
Partition
ungerichteter
Hamilton
Kreis
BPP
TSP
Für jedes der dargestellten Probleme kann man zeigen, dass es NP-vollständig ist. Im
Anschluss wird jedoch nur der Beweisweg von SAT zu BPP gegangen, da das
Erbschaftsproblem ein Spezialfall des Bin Packing Problems (BPP) ist.
Die Grundlage für diese Beweise bildet der Satz von Cook, der besagt: „SAT ist NPvollständig“ .Auf dessen Beweis, wird jedoch aus Platzgründen verzichtet, da er in
zahlreicher Fachliteratur nachzuschlagen ist.
Warum werde ich diese Beweise anführen?
Ziel dieser Beweise ist es, eine Abschätzung der Schwierigkeit des Erbschaftsproblems
zu erkennen und es in eine Klasse von Problemen einordnen zu können.
5
2.1 3SAT-Problem
2.1.1 Allgemein
Beim SAT-Problem (statisfiability problem) besteht die Aufgabe darin zu entscheiden,,
ob für die aussagenlogische Formel
f(ν1, ν2, …, νn) = ,i.j Lij,
Lij ∈ {ν1, ν2, …, νn, ¬ν1, ¬ν2, …, ¬νn}
Eine Belegung der Variablen ν1, ν2, …, νn existiert, so dass f(ν1, ν2, …, νn) den
booleschen Wert „wahr“ ergibt. Ferner kommt für das 3SAT-Problem die Bedingung
hinzu, dass f nur höchstens drei Variablen (n = 3)enthalten darf.
2.1.2 Beweis der NP-Vollständigkeit
„Da SAT ∈ NP, ist auch 3SAT ∈ NP“
SAT ≤p 3SAT
Sei nun C = (c1, …, cn) eine Eingabe für SAT, also ci eine Klausel über x1, ¬x1, …, xn,
¬xn. Für die polynomielle Transformation behandeln wir die Klauseln einzeln. Hat eine
Klausel nur ein Literal z, ersetzen wir die Klausel durch z
Form z
z’, ersetzen wir sie durch z
z
z. Hat eine Klausel die
z v z’. Klauseln mit drei Literalen übernehmen
wir unverändert.
Sei nun eine Klausel ci = z1
…
zk mit k ≥ 4 und zi ∈{x1, ¬x1, …, xn, ¬xn}gegeben.
Wir ersetzen ci durch k-2 Klauseln und benutzen k-3 neue Variablen yc,1, … yc,k-3, die
nur in diesen Klauseln vorkommen. Die neuen Klauseln haben folgendes Aussehen:
z1
z2
yc,1
¬yc,1
zl+2
yc,l+1
¬yc,k-3
zk-1
zk
(für 1 ≤ l ≤ k-4)
Diese Klauseln lassen sich offensichtlich in polynomieller Zeit konstruieren.
6
2.2 Rucksack-Problem (KP)
2.2.1 Allgemein
Gegeben seien n Objekte 1, …, n. Objekt i habe den Wert wi ∈ N0 und das Gewicht gi ∈
N0. Diese Objekte wollen wir in einen Rucksack packen, der allerdings nur ein
begrenztes Gewicht G aushält; dabei wollen wir den im Rucksack befindlichen Wert
maximieren. Gesucht ist also S ⊆ {1, …, n}, so dass:
∑i∈S gi ≤ G,
∑i∈S wi = maxS⊆{1, …, n} ∑i∈S wi.
2.2.2 Beweis der NP-Vollständigkeit
„KP ist NP-vollständig“
Sei C = (c1, …, cm) mit ci = zi1
zi2
3SAT ≤p KP
zi3 und zij ∈ {x1, ¬x1, …, xn ¬xn} eine Eingabe für
3SAT.
Die Eingabe f(C) für das Rucksackproblem wird einige spezielle Eigenschaften haben.
Es wird ai = gi für alle i und A = G sein. Es stellt sich dann noch die Frage, ob es eine
Auswahl der Objekte gibt, deren Gesamtnutzen genau A ist.
Wir vergeben nun die Zahlen in Dezimaldarstellung an. Es sei A die Zahl, die aus m
Vieren, gefolgt von n Einsen, besteht. Wir können die Zahl A in polynomieller Zeit
hinschreiben. Die Zahl A ist jedoch astronomisch groß.
Das Rucksack-Problem besteht aus 2n + 2m Objekten, deren Nutzwerte wir mit ai, bi,
cj, dj, 1 ≤ i ≤ n, 1 ≤ j ≤ m bezeichnen. Die Zahlen haben jeweils n+m Dezimalstellen.
Die Zahl ai bezieht sich auf das Literal xi. Im vorderen Block der Länge m gibt sie an
Position j an, wie oft xi in der j-ten Klausel vorkommt. Im hinteren Block der Länge n
steht an Position i eine Eins, der restlichen Positionen enthalten Nullen. Die Zahl bi ist
wie die Zahl ai aufgebaut, nur bezieht sie sich auf ¬xi. Die Zahl cj gilt der möglichen
Ergänzung. Sie enthält im vorderen Block an der Position j eine Ein und sonst Nullen.
Die Zahl dj dient ebenfalls der möglichen Ergänzung. Es ist dj = 2cj. Die Zahlen können
in polynomieller Zeit berechnet werden.
Wenn wir die Summe A aus den gegebenen Zahlen bilden können, erhalten wir dann,
wie oben beschrieben, eine kanonische Belegung der Variablen. Damit sich an den
vorderen Positionen die Summe 4 ergibt, muss in jeder Klausel mindestens ein Literal
erfüllt sein.
7
8
2.3 Erbschaftsproblem (Partition)
2.3.1 Allgemein
Für eine Menge natürlicher Zahlen a1, a2, …, an ∈ N, ist nun eine Teilmenge I ⊆ {1, 2,
.., n} gesucht, so dass die Summe von allen ai der Teilmenge I gleich der Summe aller
ai, die nicht Element der Teilmenge i sind:
∑i ∈ I ai = ∑i ∉ I ai
(Falls die Summe der ai nicht geradzahlig ist, so runde man nach unten oder verbiete
solche Elemente, da bereits in geradzahligen Summen die volle Schwierigkeit des
Problems steckt)
2.3.2 Beweis der NP-Vollständigkeit
„Partition ist NP-vollständig“
KP* ≤p Partition
Im Beweis von 2.2.2. haben wir sogar gezeigt, dass ein sehr spezielles
Rucksackproblem KP* NP-vollständig ist. Für alle a1, …, an soll entschieden werden, ob
sie wie oben gezeigt zerlegt werden können.
Es sei (a1, …, an, A) eine Eingabe für KP*. Daraus konstruieren wir in polynomieller
Zeit die Eingabe (a1, …, an, S-A+1, A+1) für Partition, wobei S die Summe aller ai ist.
Falls I eine Lösung für das KP* ist, erhalten wir mit I
{n+1} eine Lösung für
Partition, da:
∑i∈I ai + S – A + 1 = S+1 = ∑1≤i≤n ai + 1 = ∑i∉I ai + A + 1 .
Die Summe aller Zahlen in der Eingabe für Partition beträgt 2S+2. Eine Lösung für
Partition muss also so aussehen, dass jeder Teil sich zu S+1 aufsummiert. Damit
müssen die Zahlen S–A+1 und A+1 in verschiedenen Teilen sein. Die Zahlen, die S–
A+1 zu S+1 ergänzen, haben die Summe A und bilden eine Lösung für das KP*.
9
2.4 Bin Packing Problem (BPP)
2.4.1 Allgemeines
Gegeben seien eine Menge von Objekten a1, …, an, sowie k Behälter mit einer
konstanten Größe b. Gesucht ist die Anordnung der n Elemente über alle Behälter,
wobei für jeden Behälter j, mit 1≤j≤k, gelten muss:
f:{a1, …, an}
{1, …, k} und ∑f(ai) = j ai ≤ b
mit 1 ≤ i ≤ n .
2.4.2 Beweis der NP-Vollständigkeit
„BPP ist NP-vollständig“
Partition ≤p BPP
Es sei (a1, …, an) eine Eingabe für Partition. In polynomieller Zeit berechnen wir
folgende Eingabe für das BPP. Sie enthält n Objekte mit den Größen a1, …, an. Die
Behältergröße ist b ≤ (a1 + … + an)/2 mit b ∈ N und die Zahl der Behälter ist k = 2.
Ist a1 + … + an ungerade, hat Partition keine Lösung, und die Objekte passen sicher
nicht in 2 Behälter der Größe b < (a1 + … + an)/2. Ist a1 + … + an gerade, passen die
Objekte genau dann in zwei Behälter der Größe b = (a1 + … + an)/2, wenn sie sich in
zwei gleich große Teilmengen aufteilen lassen, g.h. wenn Partition eine Lösung hat.
2.5 Zusammenhang
10
3 Lösung / Strategien
3.1 Allgemein
3.1.1 zum Zahlenbeispiel (1.1.)
32, 35, 40, 41, 44, 46, 51, 59, 60, 64
72, 75, 76, 78, 80, 85, 86, 89, 92, 95
Wer solche Zahlen einige Male untersucht hat, wird spontan behaupten, dass es zu
diesem speziellen Beispiel eine Lösung geben wird. Warum?
⇒ Folgende Überlegung besagt, dass es für dieses Beispiel mit recht hoher
Wahrscheinlichkeit eine solche Teilfolge gibt:
Es existieren insgesamt 220, also rund eine Million Teilfolgen, deren Summen zwischen
0 und 1300 liegen müssen. Es ist sehr unwahrscheinlich, dass die Zahl 650 nicht unter
diesen 220 Zahlen sein sollte.
Wenn man bei einer so hohen Wahrscheinlichkeit, einfach einige Zahlen vorgeben
würde (z.B. 40+60+80+85+95 = 360) und darauf hofft die Ergänzung (290) zu finden,
würde man durch einfaches Probieren leicht den Rest der Teilfolge finden.
Angenommen wir würden jetzt 20 Zahlen nehmen die oberhalb von 230 liegen, dann
wäre die Chance, dass sich die Erbschaft in genau zwei Teile teilen lässt, im
Allgemeinen sehr gering. Denn es liegen 220 Summen der Teilfolgen oberhalb von 230
und dann wäre es sehr unwahrscheinlich, dass sich eine vorgegebene Zahl unter diesen
befindet.
Würde man aber 20 Zahlen so wählen, dass ihre Summe ungefähr 220 beträgt, dann
besteht immer noch eine hohe Chance, eine vorgegebene Zahl als Teilsumme darstellen
zu können. Also sinkt die Wahrscheinlichkeit um so mehr sich die Gesamtsumme aller
20 Zahlen von 220 nach oben bewegt. Bei z.B. 221 läge die Wahrscheinlichkeit bereits in
der Größenordnung von 0,5.
11
3.1.2 Zusammenfassung
Zu n Zahlen, deren Summe 2·G ist, gibt es 2n Teilfolgen, deren Summen zwischen 0
und 2·G liegen.
•
Je tiefer G unterhalb von 2n liegt, um so eher kann man damit rechnen, eine zufällig
gewählte Teilfolge, deren Summe <G sei, durch ausprobieren zu einer Lösung
ausbauen zu können.
•
Je stärker G oberhalb von 2n liegt, umso geringer wird die Wahrscheinlichkeit, dass
sich die Folge in zwei gleiche Teilfolgen aufspalten lässt. In diesem Fall muss man
meist alle Möglichkeiten durchprobieren, vor allem, wenn keine Lösung des
Erbschaftsproblems existiert.
⇒ Das Erbschaftsproblem ist also voraussichtlich dann nur mit dem größtmöglichen
Aufwand zu lösen, wenn alle n Zahlen größer als 2n+1 / n sind, da in diesem Fall sicher
2·G > 2n+1, also G > 2n gilt!
3.1.3 besseres Beispiel
Gegeben sind folgende 20 Zahlen, deren Summe 33.480.070 ist, d.h. G = 16.740.035.
1.976.834, 1.864.558, 1.755.621, 1.575.931, 2.169.504,
1.567.429, 2.001.571, 1.682.544, 1.289.337, 1.223.752,
1.884.283, 1.671.449, 1.400.530, 1.547.733, 1.338.626,
1.438.792, 2.010.563, 1.422.589, 1.863.866, 1.794.558
Ich habe nicht nach der Existenz einer Lösung gesucht, da dieses Beispiel nur die
Schwierigkeit des Problems verdeutlichen soll.
12
3.2 Lösung mit Hilfe des BPP
Wie bereits erwähnt, ist das Erbschaftsproblem ein Spezialfall des BPP und zwar ein
BPP mit 2 Behältern und einer Behältergröße von G.
⇒ so hat das Erbschaftsproblem genau dann eine Lösung, wenn das Bin Packing
Problem für diesen Spezialfall eine Lösung hat.
3.3 Strategie der Rückverfolgung
Die Strategie der Rückverfolgung (engl. Backtracking) ist eine der allgemeinsten
Techniken und reicht bis in das Jahr 1960 zurück.
3.3.1 Voraussetzung
Die Lösung eines Problems kann als Tupel x1, …, xn von Elementen von Mengen Si
dargestellt werden.
3.3.2 Vorgehensweise
1.
Baue einen Entscheidungsbaum auf, der alle möglichen Lösungen enthält
2.
Wähle deinen Lösungsweg und probiere ihn schrittweise aus
3.
Falls es nach Teilschritt i keinen Weg mehr zum Erfolg geben kann:
•
breche den Durchlauf ab,
•
markiere den Weg als „nicht gangbar“
•
gehe einen Schritt zurück, d.h. mache Teilschritt i rückgängig
•
probiere die nächste Alternative
3.3.3 Eigenschaften
•
auf viele praktische Beispiele anwendbar
•
in der Regel (deutlich) besser als vollständige Aufzählung
•
oft leicht durch Rekursion implementierbar
•
durch das Streichen können oft ganze Teilzweige entfallen
•
benötigt dadurch in der Regel wesentlich weniger Tests
13
3.3.4 Anschauungsbeispiel
Füge a1 zu
T1 hinzu
Füge a2 zu
T1 hinzu
Füge a1 zu
T2 hinzu
Füge a2 zu
T2 hinzu
Füge a2 zu
T1 hinzu
Füge an zu
T1 hinzu
Füge a2 zu
T2 hinzu
Füge an zu
T2 hinzu
Nach dem wir den Entscheidungsbaum aufgestellt haben, wählen wir einen Lösungsweg.
Begonnen wird an der Wurzel und wir folgen dem Pfad des von uns gewählten Lösungswegs
Füge a1 zu
T1 hinzu
Füge a2 zu
T1 hinzu
Füge a1 zu
T2 hinzu
Füge a2 zu
T2 hinzu
Füge an zu
T1 hinzu
Füge a2 zu
T1 hinzu
Füge a2 zu
T2 hinzu
Füge an zu
T2 hinzu
Kommen wir an unseren ersten Knoten überprüfen wir, ob a1 zur Teilfolge T1 hinzugefügt
werden kann. Wir nehmen an dies ist der Fall und folgen dem gewählten Lösungsweg.
14
Füge a1 zu
T1 hinzu
Füge a2 zu
T1 hinzu
Füge a1 zu
T2 hinzu
Füge a2 zu
T2 hinzu
Füge a2 zu
T1 hinzu
Füge an zu
T1 hinzu
Füge a2 zu
T2 hinzu
Füge an zu
T2 hinzu
Angekommen am nächsten Knoten wird nun geprüft, ob a2 zu T2 hinzugefügt werden kann.
Nun könnte z.B. der Fall auftreten, dass diese Operation nicht ausgeführt werden kann. Wir
markieren nun den Abzweig zu diesem Knoten als „nicht gangbar“ und müssen nun solange
unseren Pfad zurück „gehen“, bis wir an einen Knoten gelangen von dem wir in einen anderen
Abzweig gehen können.
Füge a1 zu
T1 hinzu
Füge a2 zu
T1 hinzu
Füge a1 zu
T2 hinzu
nicht
gangbar
Füge a2 zu
T2 hinzu
Füge an zu
T1 hinzu
Füge a2 zu
T1 hinzu
Füge a2 zu
T2 hinzu
Füge an zu
T2 hinzu
u.s.w.
15
4 Zusammenfassung
Das Erbschaftsproblem ist nur eines von vielen NP-vollständigen Problemen. Diese
Projektarbeit sollte einen kleinen Einblick in Menge der NP-vollständigen Probleme
schaffen. Es war nicht beabsichtigt eine Lösung für das Erbschaftsproblem zu finden.
16
Herunterladen