Skript in PDF - Theoretische Informatik - Technische Universität ...

Skript in PDF - Theoretische Informatik - Technische Universität ... Skript in PDF - Theoretische Informatik - Technische Universität ...

iti.cs.tu.bs.de
von iti.cs.tu.bs.de Mehr von diesem Publisher
18.09.2013 Aufrufe

180 KAPITEL 6. KOMPLEXITÄT VON ALGORITHMEN 6: E := E − {v : v eine Kante mit Endknoten x oder y} 7: od Korrektheit: Wir konstruieren hier eine Menge D von Knoten mit der Eigenschaft, dass jede im Schritt 6 entfernte Kante einen Endknoten in D hat. Da am Ende alle Kanten entfernt worden sind, ist D eine Knotenüberdeckung. Zeitkomplexität ist linear, denn jede Kante des Graphen wird von dem Algorithmus nur einmal besucht. Beziehung zum Optimum: Bezeichnen wir für jeden Graphen G mit opt(G) die minimale Größe einer Knoten-Überdeckung und mit c(G) die Größe der Überdeckung, die unser Algorithmus konstruiert. Es gilt c(G) ≤ 2opt(G). In der Tat hat der Algorithmus die folgende Eigenschaft: D wird mittels paarweise disjunkter Kanten des Graphen G konstruiert. Jede Überdeckung D0 muß wenigsten einen Endknoten von jeder dieser Kanten enthalten, also muß D0 mindestens halbsoviele Elemente wie D haben. Definition. Sei (Σ, E, A, L, c) ein Optimierungsproblem. Ein ε-approximierender Algorithmus (ε ≥ 0 eine reelle Zahl) ist ein Algorithmus der Klasse P, der für jede Eingabe w ∈ E eine Ausgabe v ∈ A mit vLw berechnet, so dass der relative Fehler von c(w, v) im Vergleich zum optimalen Wert opt(w) kleiner gleich ε ist; d.h., es gilt c(w, v) − opt(w) opt(w) Beispiel 2. Für MINIMALE KNOTEN-ÜBERDECKUNG haben wir einen 1approximierenden Algorithmus gefunden: es gilt c(w, v) ≤ 2opt(v), also c(w, v) − opt(w) opt(w) ≤ ε. ≤ 1. Dieser Algorithmus ist nicht ε-approximierend für ε < 1, denn schon für den Graphen mit zwei Knoten und einer Kante gilt opt = 1, c(w, v) = 2. Beispiel 3 (SIT (Scheduling Independent Tasks)). Es sollen Aufgaben W1, . . . , Wn mit gegebener zeitlicher Dauer t1, . . .,tn durch k Maschinen bewältigt werden. Wir nehmen an, dass jede Maschine unabhängig von den anderen jede Aufgabe bearbeiten kann. Unsere Ziel ist es, einen Plan (schedule) zu erstellen, d.h. jeder Arbeit Wi (i = 1, . . .,n) eine Maschine S(i) = 1, . . .,k zuzuordnen, so dass der Zeitbedarf T zur Erledigung aller Aufgaben minimal ist. Die Laufzeit der Maschine m(= 1, . . .,k) beträgt ti, wobei über alle i mit S(i) = m summiert wird. Der Zeitbedarf ist somit T = max{ S(i)=1 ti, . . . , S(i)=k Da die Zahl k der Maschinen konstant ist, bezeichnen wir das Problem als SIT(k). Wir haben also: Eingabe von SIT(k): Zahlen t1, . . . , tn. Ausgabe von SIT(k): eine Funktion S : {1, . . .,n} → {1, . . .,k}, ti}.

6.11. APPROXIMATION VON OPTIMIERUNGSPROBLEMEN 181 für die die Zahl minimal ist. T = max{ S(i)=1 ti, . . ., S(i)=k Ein 1/3-approximierender Algorithmus A für SIT(k) Der folgende Algorithmus erledigt erst die längsten Arbeiten und erst dann die kürzeren. Außerdem zieht er die am wenigsten benutzten Maschinen vor. Wir benutzen die Hilfsvariable Eingabe: Zahlen t1, . . . , tk ti} Tm = die Zeit, die Maschine m bisher gearbeitet hat Ausgabe: Funktion S : {1, . . ., n} → {1, . . ., k} 1: sortiere die gegebenen Zeiten, so dass t1 ≥ t2 ≥ · · · ≥ tn 2: for m = 1 to k do 3: Tm := 0 4: end for 5: for i = 1 to n do 6: m := ein Index mit Tm = min{T1, . . . , Tk} 7: S(i) := m 8: Tm := Tm + ti 9: end for Korrektheit: In der zweiten Schleife ab Zeile 5 wird jede Aufgabe Wi einer Maschine S(i) zugeordnet. Zeitkomplexität: Das Sortieren in Zeile 1 dauert O(n·log n) Zeiteinheiten, die Initialisierung in Zeilen 2–4 dauert O(1) Einheiten, jeder der n Durchläufe der Schleife ab Zeile 5 dauert O(1) Zeiteinheiten (insbesondere besitzt die Menge, deren Minimum in Zeile 6 zu bestimmen ist, immer k Elemente). Insgesamt wird der Zeitbedarf des Algorithmus durch das Sortieren in Zeile 1 dominiert und betragt O(n log n). Dies ist also ein Algorithmus der Klasse P. Approximierung: Dieser Algorithmus ist 1/3-approximierend. Anstatt dies hier zu beweisen, zeigen wir (für ein beliebig kleines ε > 0) einen ε-approximierenden Algorithmus für SIT(k). Beispiel 4 (Ein ε-approximierender Algorithmus für SIT(k)). Die Idee ist einfach: wir wählen eine ” geeignete“ Konstante und verteilen die ersten r (längsten) Aufgaben optimal – z.B. suchen wir aus allen k r möglichen Zuordnungen die beste aus. Den Rest berechnen wir mit dem Algorithmus aus Beispiel 3. Wir werden zeigen, dass jede Wahl (1) r > k − 1 ε einen ε-approximierbaren Algorithmus ergibt. Für eine ausgewählte Konstante r beschreiben wir also den entsprechenden Algorithmus. Approximierender Algorithmus Ar für SIT(k): 1: sortiere t1 ≥ t2 ≥ · · · ≥ tn 2: finde für die Eingabe t1, . . .,tr die optimale Planung Sopt : {1, . . .,r} → {1, . . .,k} 3: for m = 1 to k do

6.11. APPROXIMATION VON OPTIMIERUNGSPROBLEMEN 181<br />

für die die Zahl<br />

m<strong>in</strong>imal ist.<br />

T = max{ <br />

S(i)=1<br />

ti, . . ., <br />

S(i)=k<br />

E<strong>in</strong> 1/3-approximierender Algorithmus A für SIT(k)<br />

Der folgende Algorithmus erledigt erst die längsten Arbeiten und erst dann die<br />

kürzeren. Außerdem zieht er die am wenigsten benutzten Masch<strong>in</strong>en vor. Wir benutzen<br />

die Hilfsvariable<br />

E<strong>in</strong>gabe: Zahlen t1, . . . , tk<br />

ti}<br />

Tm = die Zeit, die Masch<strong>in</strong>e m bisher gearbeitet hat<br />

Ausgabe: Funktion S : {1, . . ., n} → {1, . . ., k}<br />

1: sortiere die gegebenen Zeiten, so dass t1 ≥ t2 ≥ · · · ≥ tn<br />

2: for m = 1 to k do<br />

3: Tm := 0<br />

4: end for<br />

5: for i = 1 to n do<br />

6: m := e<strong>in</strong> Index mit Tm = m<strong>in</strong>{T1, . . . , Tk}<br />

7: S(i) := m<br />

8: Tm := Tm + ti<br />

9: end for<br />

Korrektheit: In der zweiten Schleife ab Zeile 5 wird jede Aufgabe Wi e<strong>in</strong>er Masch<strong>in</strong>e<br />

S(i) zugeordnet.<br />

Zeitkomplexität: Das Sortieren <strong>in</strong> Zeile 1 dauert O(n·log n) Zeite<strong>in</strong>heiten, die Initialisierung<br />

<strong>in</strong> Zeilen 2–4 dauert O(1) E<strong>in</strong>heiten, jeder der n Durchläufe der Schleife ab<br />

Zeile 5 dauert O(1) Zeite<strong>in</strong>heiten (<strong>in</strong>sbesondere besitzt die Menge, deren M<strong>in</strong>imum<br />

<strong>in</strong> Zeile 6 zu bestimmen ist, immer k Elemente). Insgesamt wird der Zeitbedarf des<br />

Algorithmus durch das Sortieren <strong>in</strong> Zeile 1 dom<strong>in</strong>iert und betragt<br />

O(n log n).<br />

Dies ist also e<strong>in</strong> Algorithmus der Klasse P.<br />

Approximierung: Dieser Algorithmus ist 1/3-approximierend. Anstatt dies hier zu<br />

beweisen, zeigen wir (für e<strong>in</strong> beliebig kle<strong>in</strong>es ε > 0) e<strong>in</strong>en ε-approximierenden Algorithmus<br />

für SIT(k).<br />

Beispiel 4 (E<strong>in</strong> ε-approximierender Algorithmus für SIT(k)). Die Idee ist e<strong>in</strong>fach:<br />

wir wählen e<strong>in</strong>e ” geeignete“ Konstante und verteilen die ersten r (längsten) Aufgaben<br />

optimal – z.B. suchen wir aus allen k r möglichen Zuordnungen die beste aus.<br />

Den Rest berechnen wir mit dem Algorithmus aus Beispiel 3. Wir werden zeigen,<br />

dass jede Wahl<br />

(1) r ><br />

k − 1<br />

ε<br />

e<strong>in</strong>en ε-approximierbaren Algorithmus ergibt. Für e<strong>in</strong>e ausgewählte Konstante r<br />

beschreiben wir also den entsprechenden Algorithmus.<br />

Approximierender Algorithmus Ar für SIT(k):<br />

1: sortiere t1 ≥ t2 ≥ · · · ≥ tn<br />

2: f<strong>in</strong>de für die E<strong>in</strong>gabe t1, . . .,tr die optimale Planung Sopt : {1, . . .,r} → {1, . . .,k}<br />

3: for m = 1 to k do

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!