Gierige Algorithmen – Interval Scheduling
IntervalScheduling(s,f) 1. n ← length[s] 2. A ← {1} 3. j ← 1 4. for i ← 2 to n do 5. if s[i] ≥ f[j] then 6. A ← A ∪ {i} 7. j← i 8. return A
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
1
Gierige Algorithmen – Interval Scheduling
Beweisidee: Der gierige Algorithmus „liegt vorn“ • Wir messen „Fortschritt“ des Algorithmus Schritt für Schritt • Zeige: Der gierige Algorithmus macht mindestens genau so viel Fortschritt wie jeder beliebige andere Algorithmus
Beobachtung: A ist eine Menge von kompatiblen Anfragen.
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
2
Gierige Algorithmen – Interval Scheduling
Wie können wir Optimalität zeigen? • Sei O optimale Menge von Intervallen • u. U. viele optimale Lösungen • Wir zeigen: |A| = |O|
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
3
Gierige Algorithmen – Interval Scheduling
Wie können wir Optimalität zeigen? • Sei O optimale Menge von Intervallen • u. U. viele optimale Lösungen • Wir zeigen: |A| = |O|
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
4
Gierige Algorithmen – Interval Scheduling
Notation: • i1, …, i k Intervalle von A in Ordnung des Hinzufügen • j1,…, j m Intervalle von O sortiert nach Endpunkt • Zu zeigen: k = m
i 1 j
i2
i3 j
1
j SS 2008
2
3
i
4
j 4 Datenstrukturen und Algorithmen 18.Gierige Algorithmen
5
Gierige Algorithmen – Interval Scheduling
Der gierige Algorithmus liegt vorn: • Idee des Algorithmus: Die Resource soll so früh wie möglich wieder frei werden • Dies ist war für das erste Interval: f[i1] ≤ f[j1] • Zu zeigen: Gilt für alle Intervalle i 1 j
i2
i3 j
1
j SS 2008
2
3
i
4
j 4 Datenstrukturen und Algorithmen 18.Gierige Algorithmen
6
Gierige Algorithmen – Interval Scheduling
Lemma 18.4: Für alle r≤k gilt f[i r] ≤f[j r].
i 1 j
i2
i3 j
1
j SS 2008
2
3
i
4
j 4 Datenstrukturen und Algorithmen 18.Gierige Algorithmen
7
Gierige Algorithmen – Interval Scheduling
Lemma 18.4: Für alle r≤k gilt f[i r] ≤f[j r].
f[i ], f[j ] 1 1 i 1 j
i2
i3 j
1
j SS 2008
2
3
i
4
j 4 Datenstrukturen und Algorithmen 18.Gierige Algorithmen
8
Gierige Algorithmen – Interval Scheduling
Lemma 18.4: Für alle r≤k gilt f[i r] ≤f[j r].
f[i ] 2 i 1 j
i2
i3 j
1
j SS 2008
3
i
4
f[j ] 2 2
j 4 Datenstrukturen und Algorithmen 18.Gierige Algorithmen
9
Gierige Algorithmen – Interval Scheduling
Lemma 18.4: Für alle r≤k gilt f[i r] ≤f[j r].
f[i ] 3 i 1 j
i2
i3 j
1
j SS 2008
2
3
f[j ] 3
i
4
j 4 Datenstrukturen und Algorithmen 18.Gierige Algorithmen
10
Gierige Algorithmen – Interval Scheduling
Lemma 18.4: Für alle r≤k gilt f[i r] ≤f[j r].
i 1 j
i2
i3 j
1
j SS 2008
2
3
f[i ] 4 f[j ] 4 i
4
j 4 Datenstrukturen und Algorithmen 18.Gierige Algorithmen
11
Gierige Algorithmen – Interval Scheduling
Satz 18.5: Die von Algorithmus IntervalSchedule berechnete Lösung A ist optimal.
i 1 j
i2
i3 j
1
j SS 2008
2
3
i
4
j 4 Datenstrukturen und Algorithmen 18.Gierige Algorithmen
12
Gierige Algorithmen – Interval Scheduling
IntervalScheduling(s,f) 1. n ← length[s] 2. A ← {1} 3. j ← 1 4. for i ← 2 to n do 5. if s[i] ≥ f[j] then 6. A ← A ∪ {i} 7. j← i 8. return A
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
13
Gierige Algorithmen – Interval Scheduling
IntervalScheduling(s,f) 1. n ← length[s] 2. A ← {1} 3. j ← 1 4. for i ← 2 to n do 5. if s[i] ≥ f[j] then 6. A ← A ∪ {i} 7. j← i 8. return A
SS 2008
Θ(1)
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
14
Gierige Algorithmen – Interval Scheduling
IntervalScheduling(s,f) 1. n ← length[s] 2. A ← {1} 3. j ← 1 4. for i ← 2 to n do 5. if s[i] ≥ f[j] then 6. A ← A ∪ {i} 7. j← i 8. return A
SS 2008
Θ(1)
Θ(n)
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
15
Gierige Algorithmen – Interval Scheduling
IntervalScheduling(s,f) 1. n ← length[s] 2. A ← {1} 3. j ← 1 4. for i ← 2 to n do 5. if s[i] ≥ f[j] then 6. A ← A ∪ {i} 7. j← i 8. return A
SS 2008
Θ(1)
Θ(n) Θ(1)
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
16
Gierige Algorithmen – Interval Scheduling
IntervalScheduling(s,f) 1. n ← length[s] 2. A ← {1} 3. j ← 1 4. for i ← 2 to n do 5. if s[i] ≥ f[j] then 6. A ← A ∪ {i} 7. j← i 8. return A
Θ(1)
Θ(n) Θ(1) Θ(n)
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
17
Gierige Algorithmen – Interval Scheduling
Satz 18.6: Algorithmus IntervalSchedule berechnet in Θ(n) Zeit eine optimale Lösung, wenn die Eingabe nach Endzeit der Intervalle (rechter Endpunkt) sortiert ist. Die Sortierung kann in Θ(n log n) Zeit berechnet werden.
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
18
Gierige Algorithmen – Datenkompression
• Berechne Lösung schrittweise • In jedem Schritt mache lokal optimale Wahl
Daumenregel: • Wenn optimale Lösung eines Problems eine optimale Lösung von Teilproblemen enthält, dann gibt es häufig einen gierigen Algorithmus
Algorithmen: • Scheduling Probleme SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
19
Gierige Algorithmen – Datenkompression
Datenkompression • Reduziert Größen von Files • Viele Verfahren für unterschiedliche Anwendungen: MP3, MPEG, JPEG, … • Wie funktioniert Datenkompression?
Zwei Typen von Kompression: • Verlustbehaftete Kompression (Bilder, Musik, Filme,…) • Verlustfreie Kompression (Programme, Texte, Excel-Dateien,…) SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
20
Gierige Algorithmen – Datenkompression
Datenkompression • Reduziert Größen von Files • Viele Verfahren für unterschiedliche Anwendungen: MP3, MPEG, JPEG, … • Wie funktioniert Datenkompression?
Zwei Typen von Kompression: • Verlustbehaftete Kompression (Bilder, Musik, Filme,…) • Verlustfreie Kompression (Programme, Texte, Excel-Dateien,…) SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
21
Gierige Algorithmen – Datenkompression
Kodierung: • Computer arbeiten auf Bits (Symbole 0 und 1), nutzen also das Alphabet {0,1} • Menschen nutzen umfangreichere Alphabete (z.B. Alphabete von Sprachen) • Darstellung auf Rechner erfordert Umwandlung in Bitfolgen
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
22
Gierige Algorithmen – Datenkompression
Beispiel: • Alphabet Σ={a,b,c,d,…,x,y,z, ,.,:,!,?,&} (32 Zeichen) 5 • 5 Bits pro Symbol: 2 =32 Möglichkeiten a
b
00000
00001
SS 2008
…
z 11001
11010
.
:
!
?
&
11011
11100
11101
11110
11111
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
23
Gierige Algorithmen – Datenkompression
Beispiel: • Alphabet Σ={a,b,c,d,…,x,y,z, ,.,:,!,?,&} (32 Zeichen) 5 • 5 Bits pro Symbol: 2 =32 Möglichkeiten a
b
00000
00001
…
z 11001
11010
.
:
!
?
&
11011
11100
11101
11110
11111
Optimal? • 4 Bits pro Symbol nicht genug • Müssen im Durchschnitt 5 Bits für langen Text verwenden? SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
24
Gierige Algorithmen – Datenkompression
Beobachtung: • Nicht jeder Buchstabe kommt gleich häufig vor • Z.B. kommen x,y und z in Deutsch viel seltener vor als e,n oder r
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
25
Gierige Algorithmen – Datenkompression
Beobachtung: • Nicht jeder Buchstabe kommt gleich häufig vor • Z.B. kommen x,y und z in Deutsch viel seltener vor als e,n oder r
Idee: • Benutze kurze Bitstrings für Symbole die häufig vorkommen
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
26
Gierige Algorithmen – Datenkompression
Beobachtung: • Nicht jeder Buchstabe kommt gleich häufig vor • Z.B. kommen x,y und z in Deutsch viel seltener vor als e,n oder r
Idee: • Benutze kurze Bitstrings für Symbole die häufig vorkommen
Effekt: • Gesamtlänge der Kodierung einer Symbolfolge (eines Textes) wird reduziert SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
27
Gierige Algorithmen – Datenkompression
Grundlegendes Problem: • Eingabe:Text in Alphabet Σ • Gesucht: Eine binäre Kodierung von Σ, so dass die Länge des Textes in dieser Kodierung minimiert wird
Beispiel: • Σ={0,1,2,…,9} • Text = 00125590004356789 (17 Zeichen) 0
1
2
3
4
5
6
7
8
9
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
28
Gierige Algorithmen – Datenkompression
Grundlegendes Problem: • Eingabe:Text in Alphabet Σ • Gesucht: Eine binäre Kodierung von Σ, so dass die Länge des Textes in dieser Kodierung minimiert wird Länge der Kodierung: Beispiel: 4 ⋅ 17 = 68 Bits • Σ={0,1,2,…,9} • Text = 00125590004356789 (17 Zeichen) 0
1
2
3
4
5
6
7
8
9
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
29
Gierige Algorithmen – Datenkompression
Grundlegendes Problem: • Eingabe:Text in Alphabet Σ • Gesucht: Eine binäre Kodierung von Σ, so dass die Länge des Textes in dieser Kodierung minimiert wird
Beispiel: • Σ={0,1,2,…,9} • Text = 00125590004356789 (17 Zeichen) 0
1
2
3
4
5
6
7
8
9
0
11000
11001
11010
11011
10
11100
11101
11110
11111
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
30
Gierige Algorithmen – Datenkompression
Grundlegendes Problem: • Eingabe:Text in Alphabet Σ • Gesucht: Eine binäre Kodierung von Σ, so dass die Länge des Textes in dieser Kodierung minimiert wird Länge der Kodierung: Beispiel: 5 ⋅ 1 + 3 ⋅ 2 + 9 ⋅ 5 = 56 Bits • Σ={0,1,2,…,9} • Text = 00125590004356789 (17 Zeichen) 0
1
2
3
4
5
6
7
8
9
0
11000
11001
11010
11011
10
11100
11101
11110
11111
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
31
Gierige Algorithmen – Datenkompression
Grundlegendes Problem: • Eingabe:Text in Alphabet Σ • Gesucht: Eine binäre Kodierung von Σ, so dass die Länge des Textes in dieser Kodierung minimiert wird Länge der Kodierung: Beispiel: 5 ⋅ 1 + 3 ⋅ 2 + 9 ⋅ 5 = 56 Bits • Σ={0,1,2,…,9} • Text = 00125590004356789 (17 Zeichen) 0
1
2
3
4
5
6
7
8
9
0
11000
11001
11010
11011
10
11100
11101
11110
11111
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
32
Gierige Algorithmen – Datenkompression
Grundlegendes Problem: • Eingabe:Text in Alphabet Σ • Gesucht: Eine binäre Kodierung von Σ, so dass die Länge des Textes in dieser Kodierung minimiert wird Länge der Kodierung: Beispiel: 5 ⋅ 1 + 3 ⋅ 2 + 9 ⋅ 5 = 56 Bits • Σ={0,1,2,…,9} • Text = 00125590004356789 (17 Zeichen) 0
1
2
3
4
5
6
7
8
9
0
11000
11001
11010
11011
10
11100
11101
11110
11111
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
33
Gierige Algorithmen – Datenkompression
Grundlegendes Problem: • Eingabe:Text in Alphabet Σ • Gesucht: Eine binäre Kodierung von Σ, so dass die Länge des Textes in dieser Kodierung minimiert wird Länge der Kodierung: Beispiel: 5 ⋅ 1 + 3 ⋅ 2 + 9 ⋅ 5 = 56 Bits • Σ={0,1,2,…,9} • Text = 00125590004356789 (17 Zeichen) 0
1
2
3
4
5
6
7
8
9
0
11000
11001
11010
11011
10
11100
11101
11110
11111
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
34
Gierige Algorithmen – Datenkompression MorseCode: • Elektrische Pulse über Kabel • Punkte (kurze Pulse) • Striche(Lange Pulse)
Beispiele aus dem MorseCode: • e ist 0 (ein einzelner Punkt) • t ist 1 (ein einzelner Strich) • a ist 01 (Strich – Punkt)
Problem: • Ist 0101 eta, aa, etet, oder aet ? SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
35
Gierige Algorithmen – Datenkompression
Problem Mehrdeutigkeit: • Ist die Kodierung eines Buchstaben Präfix der Kodierung eines anderen Buchstaben, dann ist die Kodierung nicht immer eindeutig
Beispiel: • e = 0, a = 01 • 0 ist Präfix von 01
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
36
Gierige Algorithmen – Datenkompression
Präfix-Kodierung: Eine Präfix-Kodierung für ein Alphabet Σ ist eine Funktion γ, die jeden Buchstaben x∈Σ auf eine endliche Sequenz von 0 und 1 abbildet, so dass für x,y∈Σ, x≠y, die Sequenz γ(x) nicht Präfix der Sequenz γ(y) ist.
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
37
Gierige Algorithmen – Datenkompression
Präfix-Kodierung: Eine Präfix-Kodierung für ein Alphabet Σ ist eine Funktion γ, die jeden Buchstaben x∈Σ auf eine endliche Sequenz von 0 und 1 abbildet, so dass für x,y∈Σ, x≠y, die Sequenz γ(x) nicht Präfix der Sequenz γ(y) ist.
Beispiel (Präfix-Kodierung): x∈Σ
0
1
2
3
4
5
6
7
8
9
γ(x)
00
0100
0110
0111
1001
1010
1011
1101
1110
1111
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
38
Gierige Algorithmen – Datenkompression
Definition (Frequenz) • Die Frequenz f[x] eines Buchstaben x∈Σ bezeichnet den Bruchteil der Buchstaben im Text, die x sind.
Beispiel: • • • • •
Σ = {0,1,2} Text =„0010022001“ f[0] = 3/5 f[1] = 1/5 f[2] = 1/5
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
39
Gierige Algorithmen – Datenkompression
Definition (Kodierungslänge) Die Kodierungslänge eines Textes mit n Zeichen bzgl. einer Kodierung γ ist gegeben durch Kodierungslänge = x∈Σ Σ n⋅f[x]⋅|γ(x)|
Beispiel: • Σ = {a,b,c,d} • γ(a) = 0; γ(b) =101; γ(c)= 110; γ(d)=111 • Text = „aacdaabb“ • Kodierungslänge = 16 SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
40
Gierige Algorithmen – Datenkompression
Definition (Kodierungslänge)
Anzahl der Vorkommen von x im Text
Die Kodierungslänge eines Textes mit n Zeichen bzgl. einer Kodierung γ ist gegeben durch Kodierungslänge = x∈Σ Σ n⋅f[x]⋅|γ(x)|
Beispiel: • Σ = {a,b,c,d} • γ(a) = 0; γ(b) =101; γ(c)= 110; γ(d)=111 • Text = „aacdaabb“ • Kodierungslänge = 16 SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
41
Gierige Algorithmen – Datenkompression
Definition (Kodierungslänge) Länge der Die Kodierungslänge eines Textes mit n Zeichen bzgl.von Codierung x einer Kodierung γ ist gegeben durch
Kodierungslänge = x∈Σ Σ n⋅f[x]⋅|γ(x)|
Beispiel: • Σ = {a,b,c,d} • γ(a) = 0; γ(b) =101; γ(c)= 110; γ(d)=111 • Text = „aacdaabb“ • Kodierungslänge = 16 SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
42
Gierige Algorithmen – Datenkompression
Definition (durchschn. Kodierungslänge) Die durchschnittliche Kodierungslänge eines Textes mit n Zeichen bzgl. einer Kodierung γ ist gegeben durch ABL(γ) = x∈Σ Σ f[x]⋅|γ(x)|
Beispiel: • Σ = {a,b,c,d} • γ(a) = 0; γ(b) =101; γ(c)= 110; γ(d)=111 • Text = „aacdaabb“ • Durchschnittliche Kodierungslänge = 16/8 = 2 SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
43
Gierige Algorithmen – Datenkompression
Optimale Präfix-Kodierung: • Problem: Optimale Präfix-Kodierung • Eingabe: Alphabet Σ; für jedes x∈Σ seine Frequenz f[x] • Ausgabe: Eine Kodierung γ, die ABL(γ) minimiert
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
44
Gierige Algorithmen – Datenkompression
Kodierungen und Binärbäume:
b a d
SS 2008
c
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
45
Gierige Algorithmen – Datenkompression
Kodierungen und Binärbäume: 0
b
1
0
a
0
d
SS 2008
1
1
c
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
46
Gierige Algorithmen – Datenkompression
Kodierungen und Binärbäume: 0
b
1
0
a
0
d
SS 2008
x∈Σ γ(x)
1
1
c
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
a
00
b
1
c
011
d
010 47
Gierige Algorithmen – Datenkompression
Kodierungen und Binärbäume: x∈Σ γ(x) a
11
b
01
c
00
d
10
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
48
Gierige Algorithmen – Datenkompression
Kodierungen und Binärbäume: x∈Σ γ(x) a
11
b
01
c
00
d
10
SS 2008
1
0
0
c
0
1
b
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
d
1
a
49
Gierige Algorithmen – Datenkompression Definition: Die Tiefe eines Baumknotens ist die Länge seines Pfades zur Wurzel. 0
b
1
0
a
0
d
SS 2008
1
1
c
Tiefe(c) = 3
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
50
Gierige Algorithmen – Datenkompression
Neue Problemformulierung: • Suche Binärbaum, dessen Blätter die Symbole aus Σ sind und der ABL(T) = Σ f[x] ⋅ Tiefe(x) minimiert.
SS 2008
x∈S
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
51
Gierige Algorithmen – Datenkompression Definition: Ein Binärbaum heißt voll, wenn jeder innere Knoten zwei Kinder hat. 0
b
1
0
a
0
d
SS 2008
1
1
c
Ein voller Binärbaum
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
52
Gierige Algorithmen – Datenkompression Definition: Ein Binärbaum heißt voll, wenn jeder innere Knoten zwei Kinder hat. 0
1
0
a
0
d
SS 2008
1
b Ein nicht voller Binärbaum, da der rote innere Knoten keine zwei Kinder hat
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
53
Gierige Algorithmen – Datenkompression Lemma 16: Ein Binärbaum, der einer optimalen Präfix-Kodierung entspricht, ist voll. 0
1
b
1
0
d SS 2008
1
a
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
54
Gierige Algorithmen – Datenkompression Lemma 16: Ein Binärbaum, der einer optimalen Präfix-Kodierung entspricht, ist voll. 0
u
1
b
1
0
d SS 2008
v
1
a
Beweis: • Annahme: T ist optimal und hat inneren Knoten u mit einem Kind v • Ersetze u durch v • Dies verkürzt die Tiefe einiger Knoten, erhöht aber keine Tiefe • Damit verbessert man die Kodierung Datenstrukturen und Algorithmen 18.Gierige Algorithmen
55
Gierige Algorithmen – Datenkompression Lemma 16: Ein Binärbaum, der einer optimalen Präfix-Kodierung entspricht, ist voll. 0
1
v 0
b 1
d
a
SS 2008
Beweis: • Annahme: T ist optimal und hat inneren Knoten u mit einem Kind v • Ersetze u durch v • Dies verkürzt die Tiefe einiger Knoten, erhöht aber keine Tiefe • Damit verbessert man die Kodierung Datenstrukturen und Algorithmen 18.Gierige Algorithmen
56
Gierige Algorithmen – Datenkompression
• Ein Gedankenexperiment: • Angenommen, jemand gibt uns den optimalen Baum T*, aber nicht die Bezeichnung der Blätter • Wie schwierig ist es, die Bezeichnungen zu finden?
SS 2008
Datenstrukturen und Algorithmen 18.Gierige Algorithmen
57
Gierige Algorithmen – Datenkompression Lemma 17: Seien u und v sind Blätter von T* mit Tiefe(u)