Gierige Algorithmen Interval Scheduling

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....
Author: Christa Otto
2 downloads 2 Views 544KB Size
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)