• Keine Ergebnisse gefunden

VL-21: Greedy Algorithmen (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger

N/A
N/A
Protected

Academic year: 2022

Aktie "VL-21: Greedy Algorithmen (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger"

Copied!
77
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

VL-21: Greedy Algorithmen

(Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger

SS 2017, RWTH

(2)

Organisatorisches

• Vorlesung: Gerhard Woeginger (Zimmer 4024 im E1) Sprechstunde: Mittwoch 11:15–12:00

• Übungen: Tim Hartmann, David Korzeniewski, Björn Tauer Email: dsal-i1@algo.rwth-aachen.de

• Webseite:http://algo.rwth-aachen.de/Lehre/SS17/DSA.php

• Nächste Vorlesung:

Dienstag, Juli 18, Aula 1, zur gewohnten Zeit

(3)

Greedy Algorithmen

• Grundlegendes

optimal versus gut versus schlecht

• Sequentielle Speicherung

• Stundenplanung

• Huffman Codes

(4)

Grundlegendes

(5)

Greedy Algorithmen

Greedy Algorithmen (greedy = gierig)

Trifft in jedem Schritt eine Entscheidung, die bezüglich eines

“kurzsichtigen” Kriteriums optimal ist.

Dieses Kriterium ist einfach und schnell auszuwerten.

Wenn eine Wahl getroffen wurde, kann sienicht mehr rückgängig gemacht werden.

Greedy Algorithmen finden nicht immer die beste Lösung:

Wiederholte Wahl eines lokalen Optimums führt nicht automatisch zum globalen Optimum

Greedy kannoptimalsein (Beispiel folgt) Greedy kanngutsein (Beispiel folgt)

Greedy kannbeliebig schlecht sein (Beispiel folgt)

(6)

Greedy Algorithmen

Greedy Algorithmen (greedy = gierig)

Trifft in jedem Schritt eine Entscheidung, die bezüglich eines

“kurzsichtigen” Kriteriums optimal ist.

Dieses Kriterium ist einfach und schnell auszuwerten.

Wenn eine Wahl getroffen wurde, kann sienicht mehr rückgängig gemacht werden.

Greedy Algorithmen finden nicht immer die beste Lösung:

Wiederholte Wahl eines lokalen Optimums führt nicht automatisch zum globalen Optimum

Greedy kannoptimalsein (Beispiel folgt) Greedy kanngutsein (Beispiel folgt)

Greedy kannbeliebig schlecht sein (Beispiel folgt)

(7)

Greedy Algorithmen

Greedy Algorithmen (greedy = gierig)

Trifft in jedem Schritt eine Entscheidung, die bezüglich eines

“kurzsichtigen” Kriteriums optimal ist.

Dieses Kriterium ist einfach und schnell auszuwerten.

Wenn eine Wahl getroffen wurde, kann sienicht mehr rückgängig gemacht werden.

Greedy Algorithmen finden nicht immer die beste Lösung:

Wiederholte Wahl eines lokalen Optimums führt nicht automatisch zum globalen Optimum

Greedy kannoptimalsein (Beispiel folgt) Greedy kanngutsein (Beispiel folgt)

Greedy kannbeliebig schlecht sein (Beispiel folgt)

(8)

Greedy Algorithmen

Greedy Algorithmen (greedy = gierig)

Trifft in jedem Schritt eine Entscheidung, die bezüglich eines

“kurzsichtigen” Kriteriums optimal ist.

Dieses Kriterium ist einfach und schnell auszuwerten.

Wenn eine Wahl getroffen wurde, kann sienicht mehr rückgängig gemacht werden.

Greedy Algorithmen finden nicht immer die beste Lösung:

Wiederholte Wahl eines lokalen Optimums führt nicht automatisch zum globalen Optimum

Greedy kannoptimalsein (Beispiel folgt) Greedy kanngutsein (Beispiel folgt)

Greedy kannbeliebig schlecht sein (Beispiel folgt)

(9)

Greedy Algorithmen

Greedy Algorithmen (greedy = gierig)

Trifft in jedem Schritt eine Entscheidung, die bezüglich eines

“kurzsichtigen” Kriteriums optimal ist.

Dieses Kriterium ist einfach und schnell auszuwerten.

Wenn eine Wahl getroffen wurde, kann sienicht mehr rückgängig gemacht werden.

Greedy Algorithmen finden nicht immer die beste Lösung:

Wiederholte Wahl eines lokalen Optimums führt nicht automatisch zum globalen Optimum

Greedy kannoptimalsein (Beispiel folgt) Greedy kanngutsein (Beispiel folgt)

Greedy kannbeliebig schlecht sein (Beispiel folgt)

(10)

Greedy: kann optimal sein

Wiederholung aus VL-16: Minimale Spannbäume

Eingabe:ein gewichteter zusammenhängender GraphG mitnKnoten Ausgabe:ein minimaler Spannbaum vonG

Kruskal’s Algorithmus

So lange weniger alsn−1 Kanten markiert sind:

1 Wähle eine billigste unmarkierte Kante

2 Markiere sie, falls sie keinen Kreis mit anderen markierten Kanten schliesst

• Bei Terminierung bilden die markierten Kanten einen MST

n−1 kurzsichtige, lokale Entscheidungen ergeben globales Optimum

(11)

Greedy: kann gut sein

Wiederholung aus VL-18: Matchings

Eingabe:ein ungerichteter Graph G= (V,E) Ausgabe:ein Matching mit maximaler Kardinalität

Greedy Algorithmus

Wiederhole so lange es geht:

Markiere neue Kante, die mit keiner markierten Kante kollidiert

• Bei Terminierung bilden die markierten Kanten ein MatchingM

• Kardinalität von Greedy MatchingM ist

mindestens 50% der Kardinalität des optimalen Matchings (Beweis: Jede Greedy Kante blockiert ≤2 optimale Kanten)

(12)

Greedy: kann gut sein

Wiederholung aus VL-18: Matchings

Eingabe:ein ungerichteter Graph G= (V,E) Ausgabe:ein Matching mit maximaler Kardinalität

Greedy Algorithmus

Wiederhole so lange es geht:

Markiere neue Kante, die mit keiner markierten Kante kollidiert

• Bei Terminierung bilden die markierten Kanten ein MatchingM

• Kardinalität von Greedy MatchingM ist

mindestens 50% der Kardinalität des optimalen Matchings (Beweis: Jede Greedy Kante blockiert ≤2 optimale Kanten)

(13)

Greedy: kann beliebig schlecht sein (1)

Knotenfärbungsproblem für Graphen

Gegeben: ein ungerichteter GraphG = (V,E)

Ziel: Färbe die Knoten inV mit möglichst wenigen Farben, sodass benachbarte Knoten immer verschiedene Farben erhalten

Offizielle Definition

• EineFärbungist eine Funktionf :V → {1, . . . ,k}

sodassf(x)6=f(y)für alle{x,y} ∈E gilt.

• Diechromatische Zahlχ(G)ist die kleinste Zahlk, für die eine derartige Färbung der Knoten existiert.

χ(Kn) =n

• Für jeden BaumT mit mindestens zwei Knoten giltχ(T) =2

• Fürn≥1 gilt χ(C2n+1) =3

(14)

Greedy: kann beliebig schlecht sein (1)

Knotenfärbungsproblem für Graphen

Gegeben: ein ungerichteter GraphG = (V,E)

Ziel: Färbe die Knoten inV mit möglichst wenigen Farben, sodass benachbarte Knoten immer verschiedene Farben erhalten

Offizielle Definition

• EineFärbungist eine Funktionf :V → {1, . . . ,k}

sodassf(x)6=f(y)für alle{x,y} ∈E gilt.

• Diechromatische Zahlχ(G)ist die kleinste Zahlk, für die eine derartige Färbung der Knoten existiert.

χ(Kn) =

n

• Für jeden BaumT mit mindestens zwei Knoten giltχ(T) =2

• Fürn≥1 gilt χ(C2n+1) =3

(15)

Greedy: kann beliebig schlecht sein (1)

Knotenfärbungsproblem für Graphen

Gegeben: ein ungerichteter GraphG = (V,E)

Ziel: Färbe die Knoten inV mit möglichst wenigen Farben, sodass benachbarte Knoten immer verschiedene Farben erhalten

Offizielle Definition

• EineFärbungist eine Funktionf :V → {1, . . . ,k}

sodassf(x)6=f(y)für alle{x,y} ∈E gilt.

• Diechromatische Zahlχ(G)ist die kleinste Zahlk, für die eine derartige Färbung der Knoten existiert.

χ(Kn) =n

• Für jeden BaumT mit mindestens zwei Knoten giltχ(T) =2

• Fürn≥1 gilt χ(C2n+1) =3

(16)

Greedy: kann beliebig schlecht sein (1)

Knotenfärbungsproblem für Graphen

Gegeben: ein ungerichteter GraphG = (V,E)

Ziel: Färbe die Knoten inV mit möglichst wenigen Farben, sodass benachbarte Knoten immer verschiedene Farben erhalten

Offizielle Definition

• EineFärbungist eine Funktionf :V → {1, . . . ,k}

sodassf(x)6=f(y)für alle{x,y} ∈E gilt.

• Diechromatische Zahlχ(G)ist die kleinste Zahlk, für die eine derartige Färbung der Knoten existiert.

χ(Kn) =n

• Für jeden BaumT mit mindestens zwei Knoten giltχ(T) =

2

• Fürn≥1 gilt χ(C2n+1) =3

(17)

Greedy: kann beliebig schlecht sein (1)

Knotenfärbungsproblem für Graphen

Gegeben: ein ungerichteter GraphG = (V,E)

Ziel: Färbe die Knoten inV mit möglichst wenigen Farben, sodass benachbarte Knoten immer verschiedene Farben erhalten

Offizielle Definition

• EineFärbungist eine Funktionf :V → {1, . . . ,k}

sodassf(x)6=f(y)für alle{x,y} ∈E gilt.

• Diechromatische Zahlχ(G)ist die kleinste Zahlk, für die eine derartige Färbung der Knoten existiert.

χ(Kn) =n

• Für jeden BaumT mit mindestens zwei Knoten giltχ(T) =2

• Fürn≥1 gilt χ(C2n+1) =3

(18)

Greedy: kann beliebig schlecht sein (1)

Knotenfärbungsproblem für Graphen

Gegeben: ein ungerichteter GraphG = (V,E)

Ziel: Färbe die Knoten inV mit möglichst wenigen Farben, sodass benachbarte Knoten immer verschiedene Farben erhalten

Offizielle Definition

• EineFärbungist eine Funktionf :V → {1, . . . ,k}

sodassf(x)6=f(y)für alle{x,y} ∈E gilt.

• Diechromatische Zahlχ(G)ist die kleinste Zahlk, für die eine derartige Färbung der Knoten existiert.

χ(Kn) =n

• Für jeden BaumT mit mindestens zwei Knoten giltχ(T) =2

• Fürn≥1 giltχ(C2n+1) =

3

(19)

Greedy: kann beliebig schlecht sein (1)

Knotenfärbungsproblem für Graphen

Gegeben: ein ungerichteter GraphG = (V,E)

Ziel: Färbe die Knoten inV mit möglichst wenigen Farben, sodass benachbarte Knoten immer verschiedene Farben erhalten

Offizielle Definition

• EineFärbungist eine Funktionf :V → {1, . . . ,k}

sodassf(x)6=f(y)für alle{x,y} ∈E gilt.

• Diechromatische Zahlχ(G)ist die kleinste Zahlk, für die eine derartige Färbung der Knoten existiert.

χ(Kn) =n

• Für jeden BaumT mit mindestens zwei Knoten giltχ(T) =2

• Fürn≥1 giltχ(C2n+1) =3

(20)

Greedy: kann beliebig schlecht sein (2)

Greedy Algorithmus für Knotenfärbung So lange es einen ungefärbten Knoten gibt:

1 Wähle einen beliebigen Knoten v

2 Färbe Knoten v mit der kleinstmöglichen legalen Farbe

Beispiel

Wir betrachten bipartiten Graphen mit

• Knotenx1, . . .xn undy1, . . .yn

• Kanten{xi,yj} ∈E genau dann wenni6=j

Falls Greedy die Reihenfolgex1,y1, x2,y2, x3,y3, . . .xn,yn verwendet, so braucht Greedy nverschiedene Farben

Aber:χ(G) =2 !!

(21)

Greedy: kann beliebig schlecht sein (2)

Greedy Algorithmus für Knotenfärbung So lange es einen ungefärbten Knoten gibt:

1 Wähle einen beliebigen Knoten v

2 Färbe Knoten v mit der kleinstmöglichen legalen Farbe

Beispiel

Wir betrachten bipartiten Graphen mit

• Knotenx1, . . .xn undy1, . . .yn

• Kanten{xi,yj} ∈E genau dann wenni6=j

Falls Greedy die Reihenfolgex1,y1, x2,y2, x3,y3, . . .xn,yn verwendet, so braucht Greedy nverschiedene Farben

Aber:χ(G) =2 !!

(22)

Greedy: kann beliebig schlecht sein (2)

Greedy Algorithmus für Knotenfärbung So lange es einen ungefärbten Knoten gibt:

1 Wähle einen beliebigen Knoten v

2 Färbe Knoten v mit der kleinstmöglichen legalen Farbe

Beispiel

Wir betrachten bipartiten Graphen mit

• Knotenx1, . . .xn undy1, . . .yn

• Kanten{xi,yj} ∈E genau dann wenni6=j

Falls Greedy die Reihenfolgex1,y1, x2,y2, x3,y3, . . .xn,yn verwendet, so braucht Greedy nverschiedene Farben

Aber:χ(G) =2 !!

(23)

Greedy: kann beliebig schlecht sein (2)

Greedy Algorithmus für Knotenfärbung So lange es einen ungefärbten Knoten gibt:

1 Wähle einen beliebigen Knoten v

2 Färbe Knoten v mit der kleinstmöglichen legalen Farbe

Beispiel

Wir betrachten bipartiten Graphen mit

• Knotenx1, . . .xn undy1, . . .yn

• Kanten{xi,yj} ∈E genau dann wenni6=j

Falls Greedy die Reihenfolgex1,y1, x2,y2, x3,y3, . . .xn,yn verwendet, so braucht Greedy nverschiedene Farben

Aber:χ(G) =2 !!

(24)

Sequentielle Speicherung

(25)

Sequentielle Speicherung

Problem: Dateien am Magnetband

Eingabe: 1 DateienD1, . . . ,Dn mit LängenL[1], . . . ,L[n]

2 Ein Magnetband

Ausgabe: Eine Anordnung der Dateien auf dem Magnetband, die die durchschnittliche Lesezeit minimiert.

Angenommen, die Dateien sind in ReihenfolgeD1, . . . ,Dn abgespeichert Bei jedem Lesezugriff wird das Band vom Anfang an gelesen, bis korrekte Datei gefunden

Lesezeit fürDk ist dannPk i=1L[i] Durchschnittliche Lesezeit beträgt dann

1 n

n

X

k=1 k

X

i=1

L[i] = 1 n

n

X

k=1

(n−k+1)L[k]

(26)

Sequentielle Speicherung

Problem: Dateien am Magnetband

Eingabe: 1 DateienD1, . . . ,Dn mit LängenL[1], . . . ,L[n]

2 Ein Magnetband

Ausgabe: Eine Anordnung der Dateien auf dem Magnetband, die die durchschnittliche Lesezeit minimiert.

Angenommen, die Dateien sind in ReihenfolgeD1, . . . ,Dn abgespeichert Bei jedem Lesezugriff wird das Band vom Anfang an gelesen, bis korrekte Datei gefunden

Lesezeit fürDk ist dannPk i=1L[i]

Durchschnittliche Lesezeit beträgt dann 1

n

n

X

k=1 k

X

i=1

L[i] = 1 n

n

X

k=1

(n−k+1)L[k]

(27)

Sequentielle Speicherung

Problem: Dateien am Magnetband

Eingabe: 1 DateienD1, . . . ,Dn mit LängenL[1], . . . ,L[n]

2 Ein Magnetband

Ausgabe: Eine Anordnung der Dateien auf dem Magnetband, die die durchschnittliche Lesezeit minimiert.

Angenommen, die Dateien sind in ReihenfolgeD1, . . . ,Dn abgespeichert Bei jedem Lesezugriff wird das Band vom Anfang an gelesen, bis korrekte Datei gefunden

Lesezeit fürDk ist dannPk i=1L[i]

Durchschnittliche Lesezeit beträgt dann 1

n

n

X

k=1 k

X

i=1

L[i] = 1 n

n

X

k=1

(n−k+1)L[k]

(28)

Sequentielle Speicherung: Analyse

Problem

Eingabe: ZahlenL[1], . . . ,L[n]

Ausgabe: Permutationπ, die 1 n

n

X

k=1

(n−k+1)L[π(k)]minimiert

Angenommen,

an Stellek liegt Datei mit Längex und an Stellek+1 liegt Datei mit Längey<x

• Beitrag zur Zielfunktion ist(n−k+1)x+ (n−k)y

• Vertauschen der Dateien liefert neuen Beitrag(n−k+1)y+ (n−k)x

• Neuer Beitrag ist besser/kleiner

(29)

Sequentielle Speicherung: Analyse

Problem

Eingabe: ZahlenL[1], . . . ,L[n]

Ausgabe: Permutationπ, die 1 n

n

X

k=1

(n−k+1)L[π(k)]minimiert

Angenommen,

an Stellek liegt Datei mit Längex und an Stellek+1 liegt Datei mit Längey<x

• Beitrag zur Zielfunktion ist(n−k+1)x+ (n−k)y

• Vertauschen der Dateien liefert neuen Beitrag(n−k+1)y+ (n−k)x

• Neuer Beitrag ist besser/kleiner

(30)

Sequentielle Speicherung: Analyse

Problem

Eingabe: ZahlenL[1], . . . ,L[n]

Ausgabe: Permutationπ, die 1 n

n

X

k=1

(n−k+1)L[π(k)]minimiert

Angenommen,

an Stellek liegt Datei mit Längex und an Stellek+1 liegt Datei mit Längey<x

• Beitrag zur Zielfunktion ist(n−k+1)x+ (n−k)y

• Vertauschen der Dateien liefert neuen Beitrag(n−k+1)y+ (n−k)x

• Neuer Beitrag ist besser/kleiner

(31)

Sequentielle Speicherung: Analyse

Problem

Eingabe: ZahlenL[1], . . . ,L[n]

Ausgabe: Permutationπ, die 1 n

n

X

k=1

(n−k+1)L[π(k)]minimiert

Angenommen,

an Stellek liegt Datei mit Längex und an Stellek+1 liegt Datei mit Längey<x

• Beitrag zur Zielfunktion ist(n−k+1)x+ (n−k)y

• Vertauschen der Dateien liefert neuen Beitrag(n−k+1)y+ (n−k)x

• Neuer Beitrag ist besser/kleiner

(32)

Sequentielle Speicherung: Lösung

Satz / Folgerung / Zusammenfassung

Um die durchschnittliche Lesezeit zu minimieren,

müssen Dateien nach monoton steigender Länge abgespeichert werden.

Greedy Algorithmus für Sequentielle Speicherung So lange noch (ungespeicherte) Dateien vorhanden sind:

1 Wähle eine kürzeste Datei

2 Speichere die Datei an der nächsten Stelle am Band ab Resultierende Laufzeit istO(nlogn)

(33)

Sequentielle Speicherung: Lösung

Satz / Folgerung / Zusammenfassung

Um die durchschnittliche Lesezeit zu minimieren,

müssen Dateien nach monoton steigender Länge abgespeichert werden.

Greedy Algorithmus für Sequentielle Speicherung So lange noch (ungespeicherte) Dateien vorhanden sind:

1 Wähle eine kürzeste Datei

2 Speichere die Datei an der nächsten Stelle am Band ab Resultierende Laufzeit istO(nlogn)

(34)

Variante mit Wahrscheinlichkeiten

Problem

Eingabe: 1 DateienD1, . . . ,Dn

2 LängenL[1], . . . ,L[n]der Dateien

3 Zugriffswahrscheinlichkeitenp[1], . . . ,p[n]der Dateien (wobei Summe derp[i]gleich 1)

Ausgabe: Eine Anordnung der Dateien auf dem Magnetband, die die erwartete Lesezeit minimiert.

Angenommen, die Dateien sind in ReihenfolgeD1, . . . ,Dn abgespeichert Lesezeit fürDk ist dannPk

i=1L[i] Durchschnittliche Lesezeit beträgt dann

n

X

k=1

p[k]

k

X

i=1

L[i] =

n

X

i=1

L[i]

n

X

k=i

p[k]

(35)

Variante mit Wahrscheinlichkeiten

Problem

Eingabe: 1 DateienD1, . . . ,Dn

2 LängenL[1], . . . ,L[n]der Dateien

3 Zugriffswahrscheinlichkeitenp[1], . . . ,p[n]der Dateien (wobei Summe derp[i]gleich 1)

Ausgabe: Eine Anordnung der Dateien auf dem Magnetband, die die erwartete Lesezeit minimiert.

Angenommen, die Dateien sind in ReihenfolgeD1, . . . ,Dn abgespeichert Lesezeit fürDk ist dannPk

i=1L[i]

Durchschnittliche Lesezeit beträgt dann

n

X

k=1

p[k]

k

X

i=1

L[i] =

n

X

i=1

L[i]

n

X

k=i

p[k]

(36)

Variante mit Wahrscheinlichkeiten: Analyse

Angenommen,

an Stellek liegt Datei mit Längex und Wahrscheinlichkeitp an Stellek+1 liegt Datei mit Längey und Wahrscheinlichkeitq

Beitrag =(p+q)

k−1

X

i=1

L[i] + (x+y)

n

X

j=k+2

p[j] + px+qy+qx

Beitrag nach Vertauschen der beiden Dateien

=(p+q)

k−1

X

i=1

L[i] + (x+y)

n

X

j=k+2

p[j] + px+qy+py

Genaues Hingucken liefert:

alter Beitrag <neuer Beitrag genau dann wenn qx <py

(37)

Variante mit Wahrscheinlichkeiten: Analyse

Angenommen,

an Stellek liegt Datei mit Längex und Wahrscheinlichkeitp an Stellek+1 liegt Datei mit Längey und Wahrscheinlichkeitq

Beitrag =(p+q)

k−1

X

i=1

L[i] + (x+y)

n

X

j=k+2

p[j] + px+qy+qx

Beitrag nach Vertauschen der beiden Dateien

=(p+q)

k−1

X

i=1

L[i] + (x+y)

n

X

j=k+2

p[j] + px+qy+py

Genaues Hingucken liefert:

alter Beitrag <neuer Beitrag genau dann wenn qx <py

(38)

Variante mit Wahrscheinlichkeiten: Analyse

Angenommen,

an Stellek liegt Datei mit Längex und Wahrscheinlichkeitp an Stellek+1 liegt Datei mit Längey und Wahrscheinlichkeitq

Beitrag =(p+q)

k−1

X

i=1

L[i] + (x+y)

n

X

j=k+2

p[j] + px+qy+qx

Beitrag nach Vertauschen der beiden Dateien

=(p+q)

k−1

X

i=1

L[i] + (x+y)

n

X

j=k+2

p[j] + px+qy+py

Genaues Hingucken liefert:

alter Beitrag <neuer Beitrag genau dann wenn qx<py

(39)

Variante mit Wahrscheinlichkeiten: Lösung

Angenommen,

an Stellek liegt Datei mit Längex und Wahrscheinlichkeitp an Stellek+1 liegt Datei mit Längey und Wahrscheinlichkeitq

• alter Beitrag<neuer Beitrag genau dann wenn qx<py

• alter Beitrag<neuer Beitrag genau dann wenn x/p<y/q

Satz / Folgerung / Zusammenfassung Um die erwartete Lesezeit zu minimieren,

müssen die Dateien nach monoton steigendem Quotienten L[i]/p[i] abgespeichert werden.

• Wir erhalten einfachen Greedy Algorithmus

• Kurze und populäre Dateien am Anfang des Bandes Lange und unpopuläre Dateien am Ende des Bandes

• Resultierende Laufzeit istO(nlogn)

(40)

Variante mit Wahrscheinlichkeiten: Lösung

Angenommen,

an Stellek liegt Datei mit Längex und Wahrscheinlichkeitp an Stellek+1 liegt Datei mit Längey und Wahrscheinlichkeitq

• alter Beitrag<neuer Beitrag genau dann wenn qx<py

• alter Beitrag<neuer Beitrag genau dann wenn x/p<y/q

Satz / Folgerung / Zusammenfassung Um die erwartete Lesezeit zu minimieren,

müssen die Dateien nach monoton steigendem Quotienten L[i]/p[i]

abgespeichert werden.

• Wir erhalten einfachen Greedy Algorithmus

• Kurze und populäre Dateien am Anfang des Bandes Lange und unpopuläre Dateien am Ende des Bandes

• Resultierende Laufzeit istO(nlogn)

(41)

Variante mit Wahrscheinlichkeiten: Lösung

Angenommen,

an Stellek liegt Datei mit Längex und Wahrscheinlichkeitp an Stellek+1 liegt Datei mit Längey und Wahrscheinlichkeitq

• alter Beitrag<neuer Beitrag genau dann wenn qx<py

• alter Beitrag<neuer Beitrag genau dann wenn x/p<y/q

Satz / Folgerung / Zusammenfassung Um die erwartete Lesezeit zu minimieren,

müssen die Dateien nach monoton steigendem Quotienten L[i]/p[i]

abgespeichert werden.

• Wir erhalten einfachen Greedy Algorithmus

• Kurze und populäre Dateien am Anfang des Bandes Lange und unpopuläre Dateien am Ende des Bandes

• Resultierende Laufzeit istO(nlogn)

(42)

Stundenplanung

(43)

Stundenplanung: Beispiel

(44)

Stundenplanung: Beispiel

(45)

Stundenplanung: Problemstellung

Problem: Stundenplanung

Eingabe: 1 VorträgeV1, . . . ,Vn

2 StartzeitenL[1], . . . ,L[n]der Vorträge

3 EndzeitenR[1], . . . ,R[n]der Vorträge

Ausgabe: Eine möglichst grosse Teilmenge von Vorträgen, die zeitlich nicht überlappen

(46)

Stundenplanung: Beispiel, umgeordnet

(47)

Greedy Algorithmus

1 S o r t i e r e V o r t r a e g e n a c h a n s t e i g e n d e m E n d p u n k t R [ i ] 2 // R [1] <= R [2] <= ... <= R [ n ]

3

4 c o u n t = 1;

5 L o e s u n g [ c o u n t ] = 1;

6

7 for ( i =2; i <= n ; i ++) { 8 if ( L [ i ] > R [ c o u n t ])

9 { L o e s u n g [++ c o u n t ] = i ; }

10 }

11

12 r e t u r n L o e s u n g [ 1 . . c o u n t ];

(48)

Korrektheit (1)

Wir nehmenR[1]R[2]R[3]≤ · · · ≤R[n]an Satz

Es gibt eine optimale Lösung des Stundenplanung-Problems, die VortragV1(mit kleinstem rechten Endpunkt R[1]) verwendet.

Beweis:

• Betrachte beliebige optimale LösungX, dieV1nicht verwendet

• Betrachte VortragVk in X mit kleinstem rechten Endpunkt R[k]

• Dann giltR[k]R[1]

• Wir können problemlos inX den VortragVk durchV1ersetzen

• Neue zulässige Lösung mit gleich vielen Vorträgen wieX

• Ergo: neue Lösung ebenfalls optimal

(49)

Korrektheit (1)

Wir nehmenR[1]R[2]R[3]≤ · · · ≤R[n]an Satz

Es gibt eine optimale Lösung des Stundenplanung-Problems, die VortragV1(mit kleinstem rechten Endpunkt R[1]) verwendet.

Beweis:

• Betrachte beliebige optimale LösungX, dieV1nicht verwendet

• Betrachte VortragVk in X mit kleinstem rechten Endpunkt R[k]

• Dann giltR[k]R[1]

• Wir können problemlos inX den VortragVk durchV1ersetzen

• Neue zulässige Lösung mit gleich vielen Vorträgen wieX

• Ergo: neue Lösung ebenfalls optimal

(50)

Korrektheit (2)

Wir nehmenR[1]R[2]R[3]≤ · · · ≤R[n]an Satz

Der Greedy Algorithmus berechnet eine optimale Lösung.

Beweis:

• Wir betrachten optimale LösungX , dieV1enthält

• Dann enthältX keinen Vortrag, der mitV1überlappt

• Wir löschenV1und alle überlappenden Vorträge

• Wir argumentieren induktiv für die weiteren Vorträge

(51)

Korrektheit (2)

Wir nehmenR[1]R[2]R[3]≤ · · · ≤R[n]an Satz

Der Greedy Algorithmus berechnet eine optimale Lösung.

Beweis:

• Wir betrachten optimale LösungX, die V1 enthält

• Dann enthältX keinen Vortrag, der mitV1überlappt

• Wir löschenV1und alle überlappenden Vorträge

• Wir argumentieren induktiv für die weiteren Vorträge

(52)

Intermezzo: Anmerkung zu Greedy

Algorithmen

(53)

Anmerkung zu Greedy Algorithmen

Die Korrektheitsargumente

• für den Greedy Algorithmus zur sequentiellen Speicherung und

• für den Greedy Algorithmus zur Stundenplanung sind ganz ähnlich strukturiert.

Angenommen, es gibt eine optimale Lösung, die sich von der Greedy Lösung unterscheidet

Finde den “ersten”Unterschied zwischen den beiden Lösungen Argumentiere, dass man die optimale Entscheidung durch die Greedy Entscheidung ersetzen kann, ohne die Qualität zu verschlechtern

• Sequentielle Speicherung: kleinster Index mitL[π(k)]>L[π(k+1)]

• Stundenplanung: frühester Vortrag mit (lokal) nicht-kleinstem rechten Endpunkt

(54)

Huffman Codes

(55)

Definitionen (1)

Ein Binär-Codekodiert jeden Buchstaben eines Alphabets Σdurch einen String von0en und1en

Ein Binär-Code istpräfix-frei, wenn kein Codewort der Präfix eines anderen Codeworts ist.

Beispiel

7-Bit ASCII kodiert jeden Buchstaben durch einen String mit 7 Bits. 7-Bit ASCII ist ein präfix-freier Binär-Code.

Der Morse-Code ist ein Binär-Code. Der Morse-Code ist nicht präfix-frei:

Codewort fürA(·–) ist Präfix des Codeworts fürJ(·– – –)

(56)

Definitionen (1)

Ein Binär-Codekodiert jeden Buchstaben eines Alphabets Σdurch einen String von0en und1en

Ein Binär-Code istpräfix-frei, wenn kein Codewort der Präfix eines anderen Codeworts ist.

Beispiel

7-Bit ASCII kodiert jeden Buchstaben durch einen String mit 7 Bits.

7-Bit ASCII ist ein präfix-freier Binär-Code.

Der Morse-Code ist ein Binär-Code. Der Morse-Code ist nicht präfix-frei:

Codewort fürA(·–) ist Präfix des Codeworts fürJ(·– – –)

(57)

Definitionen (1)

Ein Binär-Codekodiert jeden Buchstaben eines Alphabets Σdurch einen String von0en und1en

Ein Binär-Code istpräfix-frei, wenn kein Codewort der Präfix eines anderen Codeworts ist.

Beispiel

7-Bit ASCII kodiert jeden Buchstaben durch einen String mit 7 Bits.

7-Bit ASCII ist ein präfix-freier Binär-Code.

Der Morse-Code ist ein Binär-Code.

Der Morse-Code ist nicht präfix-frei:

Codewort fürA(·–) ist Präfix des Codeworts fürJ(·– – –)

(58)

Definitionen (2)

Jeder präfix-freie Binär-Code kann durch Binär-Baum dargestellt werden:

Die Buchstaben des AlphabetsΣsind in den Blättern

Das Codewort für Buchstaben entspricht Pfad von Wurzel zu Blatt Entlang des Pfades gilt: Links=0 und Rechts=1

Längedes Codeworts =Tiefedes Blattes im Baum

(59)

Definitionen (3)

Optimierungsziel: Kodierte Botschaften sollen so kurz wie möglich sein Problem: Optimaler präfix-freier Binär-Code

Eingabe: 1 Ein AlphabetΣmitnBuchstaben

2 Die Texthäufigkeitenh1,h2, . . . ,hn der Buchstaben Ausgabe: Ein präfix-freier Binär-Code, der die Gesamtlänge der

kodierten Botschaft minimiert:

Gesamtlänge =

k

X

i=1

hi·Tiefe[i]

(60)

Beispiel (1)

A C D E F G H I L N

3 3 2 26 5 3 8 13 2 16

O R S T U V W X Y Z

9 6 27 22 2 5 8 4 5 1

(61)

Beispiel (2)

170

59 111

32 60 51

25

12

6 6

3

39 21

17 10 11

8

4 16

27S

16N

W8 H8

X4

O9 22T

F5 V

5 Y

5 R

6

A3 C

3 G

3

D2 Z 1 13I

26E

U2 L2

(62)

Huffman Algorithmus

David Albert Huffman (1925–1999):

Amerikanischer Computer Scientist; MIT; UC Santa Cruz

Greedy Algorithmus (Huffman, 1951)

So lange zwei oder mehr Buchstaben vorhanden sind:

1 Verschmilz die beiden Buchstaben mit kleinster Häufigkeithundh0

2 Das verschmolzene Resultat erhält Häufigkeit h+h0 Implementierung: mit MinHeap (ExtractMin; Insert)

(63)

Huffman Algorithmus

Build-Huffman-Tree

1 v o i d H u f f m a n T r e e ( int & f r e q u e n c y [2 n ] ,

2 & L [2 n ] , & R [2 n ] , & p a r e n t [2 n ]) { 3

4 for ( i =1; i <= n ; i ++) { 5 L [ i ] = 0 ; R [ i ] = 0 ;

6 i n s e r t ( i , f r e q u e n c y [ i ])

7 }

8

9 for ( i = n +1; i <=2 n -1; i ++) { 10 x = E x t r a c t M i n () ; 11 y = E x t r a c t M i n () ;

12 f r e q u e n c y [ i ] = f r e q u e n c y [ x ]+ f r e q u e n c y [ y ]

13 L [ i ]= x ; R [ i ]= y ;

14 p a r e n t [ x ]= i ; p a r e n t [ y ]= i ; 15 I n s e r t ( i , f r e q u e n c y [ i ])

16 }

17

18 p a r e n t [2 n - 1 ] = 0;

19 }

(64)

Korrektheit (1)

Unser Ziel:

Wir wollen nun zeigen, dass der Huffman Algorithmus für jede Folge h1, . . . ,hnvon Häufigkeiten einen optimalen präfix-freien Binär-Code berechnet.

Die Fällen≤2sind trivial.

Wir nehmen von jetzt ann≥3 an.

Beobachtung

Wir betrachten einen optimalen präfix-freien Binär-Code.

Es seibein Blatt mit maximaler Tiefe im entsprechenden Binär-Baum.

Dann gibt es ein anderes Blattb0,

das die selbe Tiefe und den selben Vater wiebhat.

(65)

Korrektheit (2)

Beobachtung

Es seiena mit Häufigkeitha undb mit Häufigkeithb zwei Buchstaben mit geringster Häufigkeit.

Dann existiert ein optimaler präfix-freier Binär-Code, in dessen Baum die beiden Buchstabenaundb

1 Geschwister sind, und

2 zwei Blätter mit maximaler Tiefe sind.

Beweis:

• Andernfalls vertauschen wir Blatta mit Blattx mit maximaler Tiefe

• Tiefe[a] = alte Tiefe vona; Tiefe[x]= alte Tiefe vonx

• Man rechnet leicht nach:

ha·Tiefe[a] +hx·Tiefe[x] ≥ ha·Tiefe[x] +hx·Tiefe[a]

(66)

Korrektheit (2)

Beobachtung

Es seiena mit Häufigkeitha undb mit Häufigkeithb zwei Buchstaben mit geringster Häufigkeit.

Dann existiert ein optimaler präfix-freier Binär-Code, in dessen Baum die beiden Buchstabenaundb

1 Geschwister sind, und

2 zwei Blätter mit maximaler Tiefe sind.

Beweis:

• Andernfalls vertauschen wir Blatta mit Blattx mit maximaler Tiefe

• Tiefe[a] = alte Tiefe vona; Tiefe[x]= alte Tiefe vonx

• Man rechnet leicht nach:

ha·Tiefe[a] +hx·Tiefe[x] ≥ ha·Tiefe[x] +hx·Tiefe[a]

(67)

Korrektheit (3)

• Wir betrachten HäufigkeitenH= (h1, . . . ,hn)mith1h2≥ · · · ≥hn

• Es seiT der optimale Baum fürH

• OBdA: Die beiden Buchstaben mit Häufigkeitenhn−1undhnsind Blätter inT, mit maximaler Tiefe und mit selbem Vater

• Wir konstruieren neuen BaumT0: Wir verschmelzen diese beiden Blätter mit Vater, und geben Vaterv0 die Häufigkeith0:=hn−1+hn

• Tiefe[v0]= Tiefe[n]−1

cost(T) =

k

X

i=1

hi·Tiefe[i]

= cost(T0) +hn−1·Tiefe[n] +hn·Tiefe[n]−h0·Tiefe[v0]

= cost(T0) + (hn−1+hnh0)·Tiefe[n] + h0

= cost(T0) + (hn−1+hn)

(68)

Korrektheit (3)

• Wir betrachten HäufigkeitenH= (h1, . . . ,hn)mith1h2≥ · · · ≥hn

• Es seiT der optimale Baum fürH

• OBdA: Die beiden Buchstaben mit Häufigkeitenhn−1undhnsind Blätter inT, mit maximaler Tiefe und mit selbem Vater

• Wir konstruieren neuen BaumT0: Wir verschmelzen diese beiden Blätter mit Vater, und geben Vaterv0 die Häufigkeith0:=hn−1+hn

• Tiefe[v0]= Tiefe[n]−1

cost(T) =

k

X

i=1

hi·Tiefe[i]

= cost(T0) +hn−1·Tiefe[n] +hn·Tiefe[n]−h0·Tiefe[v0]

= cost(T0) + (hn−1+hnh0)·Tiefe[n] + h0

= cost(T0) + (hn−1+hn)

(69)

Korrektheit (3)

• Wir betrachten HäufigkeitenH= (h1, . . . ,hn)mith1h2≥ · · · ≥hn

• Es seiT der optimale Baum fürH

• OBdA: Die beiden Buchstaben mit Häufigkeitenhn−1undhnsind Blätter inT, mit maximaler Tiefe und mit selbem Vater

• Wir konstruieren neuen BaumT0: Wir verschmelzen diese beiden Blätter mit Vater, und geben Vaterv0 die Häufigkeith0:=hn−1+hn

• Tiefe[v0]= Tiefe[n]−1

cost(T) =

k

X

i=1

hi·Tiefe[i]

= cost(T0) +hn−1·Tiefe[n] +hn·Tiefe[n]−h0·Tiefe[v0]

= cost(T0) + (hn−1+hnh0)·Tiefe[n] + h0

= cost(T0) + (hn−1+hn)

(70)

Korrektheit (3)

• Wir betrachten HäufigkeitenH= (h1, . . . ,hn)mith1h2≥ · · · ≥hn

• Es seiT der optimale Baum fürH

• OBdA: Die beiden Buchstaben mit Häufigkeitenhn−1undhnsind Blätter inT, mit maximaler Tiefe und mit selbem Vater

• Wir konstruieren neuen BaumT0: Wir verschmelzen diese beiden Blätter mit Vater, und geben Vaterv0 die Häufigkeith0:=hn−1+hn

• Tiefe[v0]= Tiefe[n]−1

cost(T) =

k

X

i=1

hi·Tiefe[i]

= cost(T0) +hn−1·Tiefe[n] +hn·Tiefe[n]−h0·Tiefe[v0]

= cost(T0) + (hn−1+hnh0)·Tiefe[n] + h0

= cost(T0) + (hn−1+hn)

(71)

Korrektheit (3)

• Wir betrachten HäufigkeitenH= (h1, . . . ,hn)mith1h2≥ · · · ≥hn

• Es seiT der optimale Baum fürH

• OBdA: Die beiden Buchstaben mit Häufigkeitenhn−1undhnsind Blätter inT, mit maximaler Tiefe und mit selbem Vater

• Wir konstruieren neuen BaumT0: Wir verschmelzen diese beiden Blätter mit Vater, und geben Vaterv0 die Häufigkeith0:=hn−1+hn

• Tiefe[v0]= Tiefe[n]−1

cost(T) =

k

X

i=1

hi·Tiefe[i]

= cost(T0) +hn−1·Tiefe[n] +hn·Tiefe[n]−h0·Tiefe[v0]

= cost(T0) + (hn−1+hnh0)·Tiefe[n] + h0

= cost(T0) + (hn−1+hn)

(72)

Korrektheit (3)

• Wir betrachten HäufigkeitenH= (h1, . . . ,hn)mith1h2≥ · · · ≥hn

• Es seiT der optimale Baum fürH

• OBdA: Die beiden Buchstaben mit Häufigkeitenhn−1undhnsind Blätter inT, mit maximaler Tiefe und mit selbem Vater

• Wir konstruieren neuen BaumT0: Wir verschmelzen diese beiden Blätter mit Vater, und geben Vaterv0 die Häufigkeith0:=hn−1+hn

• Tiefe[v0]= Tiefe[n]−1

cost(T) =

k

X

i=1

hi·Tiefe[i]

= cost(T0) +hn−1·Tiefe[n] +hn·Tiefe[n]−h0·Tiefe[v0]

= cost(T0) + (hn−1+hnh0)·Tiefe[n] + h0

= cost(T0) + (hn−1+hn)

(73)

Korrektheit (4)

Aus der Gleichung

cost(T) = cost(T0) +(hn−1+hn)

folgt, dass wir nur die Kosten von T0 minimieren müssen, falls wir die Kosten vonT minimieren wollen

Restproblem: Finde einen optimalen präfix-freien Binär-Code für die HäufigkeitenH0= (h1,h2, . . . ,hn−2, hn−1+hn)

Induktives Argument: Huffman liefert optimalen Binär-Baum für H0 Ergo: Huffman liefert optimalen Binär-Baum fürH

Satz

Der Huffman Algorithmus bestimmt für jede Häufigkeits-Verteilung einen optimalen präfix-freien Binär-Code.

(74)

Korrektheit (4)

Aus der Gleichung

cost(T) = cost(T0) +(hn−1+hn)

folgt, dass wir nur die Kosten von T0 minimieren müssen, falls wir die Kosten vonT minimieren wollen

Restproblem: Finde einen optimalen präfix-freien Binär-Code für die HäufigkeitenH0= (h1,h2, . . . ,hn−2, hn−1+hn)

Induktives Argument: Huffman liefert optimalen Binär-Baum für H0 Ergo: Huffman liefert optimalen Binär-Baum fürH

Satz

Der Huffman Algorithmus bestimmt für jede Häufigkeits-Verteilung einen optimalen präfix-freien Binär-Code.

(75)

Korrektheit (4)

Aus der Gleichung

cost(T) = cost(T0) +(hn−1+hn)

folgt, dass wir nur die Kosten von T0 minimieren müssen, falls wir die Kosten vonT minimieren wollen

Restproblem: Finde einen optimalen präfix-freien Binär-Code für die HäufigkeitenH0= (h1,h2, . . . ,hn−2, hn−1+hn)

Induktives Argument: Huffman liefert optimalen Binär-Baum für H0 Ergo: Huffman liefert optimalen Binär-Baum fürH

Satz

Der Huffman Algorithmus bestimmt für jede Häufigkeits-Verteilung einen optimalen präfix-freien Binär-Code.

(76)

Korrektheit (4)

Aus der Gleichung

cost(T) = cost(T0) +(hn−1+hn)

folgt, dass wir nur die Kosten von T0 minimieren müssen, falls wir die Kosten vonT minimieren wollen

Restproblem: Finde einen optimalen präfix-freien Binär-Code für die HäufigkeitenH0= (h1,h2, . . . ,hn−2, hn−1+hn)

Induktives Argument: Huffman liefert optimalen Binär-Baum für H0 Ergo: Huffman liefert optimalen Binär-Baum fürH

Satz

Der Huffman Algorithmus bestimmt für jede Häufigkeits-Verteilung einen optimalen präfix-freien Binär-Code.

(77)

Organisatorisches

• Nächste Vorlesung:

Dienstag, Juli 18, Aula 1, zur gewohnten Zeit

• Webseite:http://algo.rwth-aachen.de/Lehre/SS17/DSA.php

Referenzen

ÄHNLICHE DOKUMENTE

• Dies gilt für die gesamte Vorlesung (+ Übungen + Klausur).. Fibonacci-Zahlen:

Element getMin(PriorityQueue pq) gibt das Element mit dem kleinsten Schlüssel zurück; benötigt nicht-leere pq. void delMin(PriorityQueue pq) entfernt das Element mit dem

Man kann einen neuen Knoten mit Schlüssel k in den BST t einfügen, ohne die BST-Eigenschaft zu zerstören:.. Suche einen geeigneten,

Daher: Falls Schlüssel auch gelöscht werden sollen, so wird häufiger Verkettung zur Kollisionsauflösung verwendet.... Löschen bei offener

Lambert Kurt John Ivo Harry Greg Frank Edward Dirk Cor Bernhard Adrian. DSAL/SS 2017 VL-18:

Die Ford-Fulkerson Methode erweitert den Fluss in G sukzessive um augmentierende Pfade im Residualen Netzwerk G f bis es keine solche Pfade mehr gibt. Wir werden

DP-Probleme sind im allgemeinen Optimierungsprobleme: Es gibt verschiedene Lösungen, die mit einer Kostenfunktion bewertet werden.. Wir suchen eine Lösung mit minimalen Kosten

Bei Aufgaben vom Typ “Wenden Sie den Algorithmus XYZ auf folgende Eingabe an” werden Punkte ausschliesslich für den Rechenweg vergeben. Für das Auflisten des Endergebnisses alleine