2
Greedy Verfahren
1. Allgemeine Vorbemerkungen
2. Einfache Beispiele
• Münzwechselproblem
• Handlungsreisenden-Problem
3. Das Aktivitäten Auswahlproblem
3
Treffe in jedem Verfahrensschritt diejenige
Entscheidung, die im Moment am besten ist!
Möglichkeiten:
1. Wir erhalten stets die optimale Gesamtlösung.
2. Wir erhalten eine Lösung, die zwar nicht immer
optimal ist, aber vom Optimum stets nur wenig
abweicht.
3. Die berechnete Lösung kann beliebig schlecht
werden.
Greedy Verfahren zur Lösung eines
Optimierungsproblems
4
Einfache Beispiele: Münzwechsel-Problem
EUR Bargeld-Werte:
500, 200, 100, 50, 20, 10, 5, 2, 1
Beobachtung
Jeder EUR Betrag kann durch Münzen und Banknoten
mit diesen Werten bezahlt werden.
Ziel
Bezahlung eines Betrages n mit möglichst wenig
Münzen und Banknoten
5
Greedy-Verfahren
Wähle die maximale Zahl von Banknoten und
Münzen mit jeweils größtmöglichem Wert, bis
der gewünschte Betrag n erreicht ist.
Beispiel: n = 487
500 200 100 50 20 10 5 2 1
6
Allgemeines Münzwechselproblem
Werte von Münzen und Banknoten: n1, n2, ..., nk
n1 > n2 > ... > nk, und nk = 1.
Greedy Zahlungsverfahren:
1. w = n
2. for i = 1 to k do
# Münzen mit Wert mi = w/ ni
w = w - m i ni
Jeder Geldbetrag kann bezahlt werden!
7
Land Absurdia
Drei Münzen:
n3 = 1, n2 > 1 beliebig, n1 = 2 n2 + 1
Beispiel: 41, 20, 1
Zu zahlender Betrag: n = 3 n2 (z.B. n = 60)
Optimale Zahlungsweise:
Greedy Zahlungsverfahren:
8
Handlungsreisenden-Problem (TSP)
Gegeben: n Orte und Kosten c(i,j), um von i nach j
zu reisen
Gesucht: Eine billigste Rundreise, die alle Orte genau
einmal besucht.
Formal: Eine Permutation p von {1, 2, ..., n}, so dass
c(p(1),p(2)) + ••• + c(p(n-1),p(n)) + c(p(n),p(1))
minimal ist.
9
Handlungsreisenden-Problem (TSP)
Greedy Verfahren zur Lösung von TSP
Beginne mit Ort 1 und gehe jeweils zum nächsten
bisher noch nicht besuchten Ort. Wenn alle Orte
besucht sind, kehre zum Ausgangsort 1 zurück.
10
Handlungsreisenden-Problem (TSP)
Beispiel
c(i,i+1) = 1, für i = 1, ..., n - 1
c(n,1) = M (für eine sehr große Zahl M)
c(i,j) = 2, sonst
Optimale Tour:
Vom Greedy Verfahren berechnete Tour:
1 2 3 n – 2 n – 1 n
1 2 3 n – 2 n – 1 n
Intervall Scheduling:� Ressource (Hörsaal, Parallelrechner, Elektronenmikroskop,..)
� Anfragen: Kann ich die Ressource für den Zeitraum (t ,t )
nutzen?
� Ziel: Möglichst viele Anfragen erfüllen
1 2
11
Aktivitäten Auswahlproblem
Intervall Scheduling:� Ressource (Hörsaal, Parallelrechner, Elektronenmikroskop,..)
� Anfragen: Kann ich die Ressource für den Zeitraum (t ,t )
nutzen?
� Ziel: Möglichst viele Anfragen erfüllen
1 2
12
Intervall Scheduling
Definition:� Zwei Anfragen heißen kompatibel, wenn sich die
Intervalle nicht überschneiden.
13
Intervall Scheduling
Definition:� Zwei Anfragen heißen kompatibel, wenn sich die
Intervalle nicht überschneiden.
14
Intervall Scheduling
Definition:� Zwei Anfragen heißen kompatibel, wenn sich die
Intervalle nicht überschneiden.
15
Intervall Scheduling
Generelle Überlegung:� Wähle erste Anfrage i geschickt
� Ist i akzeptiert, weise alle Anfragen zurück, die nicht
kompatibel sind
� Wähle nächste Anfrage i und weise alle Anfragen zurück, die nicht mit i kompatibel sind
� Mache weiter, bis keine Anfragen mehr übrig sind
1
1
2
2
16
Intervall Scheduling
Generelle Überlegung:� Wähle erste Anfrage i geschickt
� Ist i akzeptiert, weise alle Anfragen zurück, die nicht
kompatibel sind
� Wähle nächste Anfrage i und weise alle Anfragen zurück, die nicht mit i kompatibel sind
� Mache weiter, bis keine Anfragen mehr übrig sind
1
1
2
2
17
Intervall Scheduling
Generelle Überlegung:� Wähle erste Anfrage i geschickt
� Ist i akzeptiert, weise alle Anfragen zurück, die nicht
kompatibel sind
� Wähle nächste Anfrage i und weise alle Anfragen zurück, die nicht mit i kompatibel sind
� Mache weiter, bis keine Anfragen mehr übrig sind
1
1
2
2
18
Intervall Scheduling
Generelle Überlegung:� Wähle erste Anfrage i geschickt
� Ist i akzeptiert, weise alle Anfragen zurück, die nicht
kompatibel sind
� Wähle nächste Anfrage i und weise alle Anfragen zurück, die nicht mit i kompatibel sind
� Mache weiter, bis keine Anfragen mehr übrig sind
1
1
2
2
19
Intervall Scheduling
Generelle Überlegung:� Wähle erste Anfrage i geschickt
� Ist i akzeptiert, weise alle Anfragen zurück, die nicht
kompatibel sind
� Wähle nächste Anfrage i und weise alle Anfragen zurück, die nicht mit i kompatibel sind
� Mache weiter, bis keine Anfragen mehr übrig sind
1
1
2
2
20
Intervall Scheduling
Generelle Überlegung:� Wähle erste Anfrage i geschickt
� Ist i akzeptiert, weise alle Anfragen zurück, die nicht
kompatibel sind
� Wähle nächste Anfrage i und weise alle Anfragen zurück, die nicht mit i kompatibel sind
� Mache weiter, bis keine Anfragen mehr übrig sind
1
1
2
2
21
Intervall Scheduling
Strategie 1:� Wähle immer die Anfrage, die am frühesten beginnt
Optimalität ?
27
Intervall Scheduling
Strategie 1:� Wähle immer die Anfrage, die am frühesten beginnt
Optimalität ?
28
Intervall Scheduling
Strategie 1:� Wähle immer die Anfrage, die am frühesten beginnt
Optimalität ? Nicht optimal, da eine
optimale Lösung 4
Anfragen erfüllen kann
29
Intervall Scheduling
Strategie 2:� Wähle immer das kürzeste Intervall
Optimalität?
Ebenfalls nicht optimal, da man 2
Anfragen erfüllen kann!
38
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
39
Intervall Scheduling
40
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
40
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
41
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
42
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
43
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
44
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
45
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
46
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
47
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
48
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
49
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
Optimalität?
50
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
Optimalität?
51
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
Optimalität?
52
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
Optimalität?
53
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
Optimalität?
54
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
Optimalität?
55
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
Optimalität?
56
Intervall Scheduling
Strategie 3:� Wähle immer das Intervall mit den wenigsten nicht
kompatiblen Intervallen
� bei Gleichheit wähle das kürzeste Intervall
Optimalität?Wieder nicht optimal!
57
Intervall Scheduling
Worauf muss man achten?� Resource muss möglichst früh wieder frei werden!
Neue Strategie:� Nimm die Anfrage, die am frühesten fertig ist.
58
Intervall Scheduling
Worauf muss man achten?� Resource muss möglichst früh wieder frei werden!
Neue Strategie:� Nimm die Anfrage, die am frühesten fertig ist.
59
Intervall Scheduling
Worauf muss man achten?� Resource muss möglichst früh wieder frei werden!
Neue Strategie:� Nimm die Anfrage, die am frühesten fertig ist.
60
Intervall Scheduling
Worauf muss man achten?� Resource muss möglichst früh wieder frei werden!
Neue Strategie:� Nimm die Anfrage, die am frühesten fertig ist.
61
Intervall Scheduling
Worauf muss man achten?� Resource muss möglichst früh wieder frei werden!
Neue Strategie:� Nimm die Anfrage, die am frühesten fertig ist.
62
Intervall Scheduling
Worauf muss man achten?� Resource muss möglichst früh wieder frei werden!
Neue Strategie:� Nimm die Anfrage, die am frühesten fertig ist.
63
Intervall Scheduling
Worauf muss man achten?� Resource muss möglichst früh wieder frei werden!
Neue Strategie:� Nimm die Anfrage, die am frühesten fertig ist.
64
Intervall Scheduling
Worauf muss man achten?� Resource muss möglichst früh wieder frei werden!
Neue Strategie:� Nimm die Anfrage, die am frühesten fertig ist.
65
Intervall Scheduling
Worauf muss man achten?� Resource muss möglichst früh wieder frei werden!
Neue Strategie:� Nimm die Anfrage, die am frühesten fertig ist.
Diese Strategie ist
optimal! Aber wie beweist man das?
66
Intervall Scheduling
Formale Problemformulierung:� Problem: Intervall Scheduling
� Eingabe: Felder s und f, die die Intervalle (s[i], f[i])
beschreiben
� Ausgabe: Indizes der ausgewählten Intervalle
Wichtige Annahme:� Eingabe nach Intervallendpunkten sortiert, d.h.
� f[1] ≤f[2] ≤ …≤f[n]
67
Intervall 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
7. return A
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5
68
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5
69
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5
70
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j
71
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j
i
72
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j
i
f[j]
s[i]
73
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j
i
f[j]
s[i]
74
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j i
f[j]
75
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j i
f[j]
s[i]
76
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j i
f[j]
s[i]
77
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j
78
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j
i
79
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j
f[j]
i
s[i]
80
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5j
f[j]
i
s[i]
81
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5
j
82
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5
j
83
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5
j
i
f[j]
s[i]
84
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5
j
i
85
Intervall 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
s 1 2 4 7 5
f 3 5 6 8 9
1
2
3
4
5
j
i
86
Intervall 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 Anfrage.
87
Intervall Scheduling
Wie können wir Optimalität zeigen?� Sei O optimale Menge von Intervallen
� u. U. viele optimale Lösungen
� Wir zeigen: |A| = |O|
88
Intervall Scheduling
Wie können wir Optimalität zeigen?� Sei O optimale Menge von Intervallen
� u. U. viele optimale Lösungen
� Wir zeigen: |A| = |O|
89
Intervall Scheduling
Wie können wir Optimalität zeigen?� Sei O optimale Menge von Intervallen
� u. U. viele optimale Lösungen
� Wir zeigen: |A| = |O|
90
Intervall Scheduling
Wie können wir Optimalität zeigen?� Sei O optimale Menge von Intervallen
� u. U. viele optimale Lösungen
� Wir zeigen: |A| = |O|
91
Intervall Scheduling
Wie können wir Optimalität zeigen?� Sei O optimale Menge von Intervallen
� u. U. viele optimale Lösungen
� Wir zeigen: |A| = |O|
92
Intervall Scheduling
Wie können wir Optimalität zeigen?� Sei O optimale Menge von Intervallen
� u. U. viele optimale Lösungen
� Wir zeigen: |A| = |O|
93
Intervall Scheduling
Wie können wir Optimalität zeigen?� Sei O optimale Menge von Intervallen
� u. U. viele optimale Lösungen
� Wir zeigen: |A| = |O|
94
Intervall Scheduling
Wie können wir Optimalität zeigen?� Sei O optimale Menge von Intervallen
� u. U. viele optimale Lösungen
� Wir zeigen: |A| = |O|
95
Intervall Scheduling
Notation:� i , …, i Intervalle von A in Ordnung des Hinzufügen
� j ,…, j Intervalle von O sortiert nach Endpunkt
� Zu zeigen: k = m
i i i
ij
j
j
j
1
1
2
2
3
3 4
4
1
1
k
m
96
Intervall 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[i ] ≤ f[j ]
� Zu zeigen: Gilt für alle Intervalle
i i i
ij
j
j
j
1
1
2
2
3
3 4
4
1 1
97
Intervall Scheduling
Lemma:
Für alle r≤k gilt f[i ] ≤f[j ].
i i i
ij
j
j
j
1
1
2
2
3
3 4
4
r r
f[i ], f[j ]1 1
99
Intervall Scheduling
Lemma:
Für alle r≤k gilt f[i ] ≤f[j ].
i i i
ij
j
j
j
1
1
2
2
3
3 4
4
r r
f[i ]
2
2
f[j ]
100
Intervall Scheduling
Lemma:
Für alle r≤k gilt f[i ] ≤f[j ].
i i i
ij
j
j
j
1
1
2
2
3
3 4
4
r r
f[i ]3 3
f[j ]
101
Intervall Scheduling
Lemma:
Für alle r≤k gilt f[i ] ≤f[j ].
i i i
ij
j
j
j
1
1
2
2
3
3 4
4
r r
f[i ]4
4f[j ]
102
Intervall Scheduling
Satz:
Die von Algorithmus IntervalScheduling berechnete Lösung
A ist optimal.
i i i
ij
j
j
j
1
1
2
2
3
3 4
4
103
Intervall 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
104
Intervall Scheduling
IntervalScheduling(s,f)
1. n ← length[s]
2. A ← {1} Θ(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
105
Intervall Scheduling
IntervalScheduling(s,f)
1. n ← length[s]
2. A ← {1} Θ(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
Θ(n)
106
Intervall Scheduling
IntervalScheduling(s,f)
1. n ← length[s]
2. A ← {1} Θ(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)
107
Intervall Scheduling
IntervalScheduling(s,f)
1. n ← length[s]
2. A ← {1} Θ(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)
Θ(n)
108
Intervall Scheduling
Satz:
Algorithmus IntervalScheduling 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.
109
Intervall Scheduling
110
Greedy-Verfahren
Greedy-Wahl-Eigenschaften:
Wenn man optimale Teillösung hat und man trifft eine lokal optimale Wahl, dann gibt es eine global optimale Lösung, die diese Wahl enthält.
Optimalität von Teillösungen:
Eine Teillösung einer optimalen Lösung ist eine optimale Lösung des Teilproblems.
� nach jeder lokal optimalen Wahl erhalten wir ein zur Ausgangs-situation analoges Problem