Greedy Verfahren -...

110
Greedy Verfahren

Transcript of Greedy Verfahren -...

Greedy Verfahren

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

22

Intervall Scheduling

Strategie 1:� Wähle immer die Anfrage, die am frühesten beginnt

23

Intervall Scheduling

Strategie 1:� Wähle immer die Anfrage, die am frühesten beginnt

24

Intervall Scheduling

Strategie 1:� Wähle immer die Anfrage, die am frühesten beginnt

25

Intervall Scheduling

Strategie 1:� Wähle immer die Anfrage, die am frühesten beginnt

26

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

30

Intervall Scheduling

Strategie 2:� Wähle immer das kürzeste Intervall

31

Intervall Scheduling

Strategie 2:� Wähle immer das kürzeste Intervall

32

Intervall Scheduling

Strategie 2:� Wähle immer das kürzeste Intervall

33

Intervall Scheduling

Strategie 2:� Wähle immer das kürzeste Intervall

34

Intervall Scheduling

Strategie 2:� Wähle immer das kürzeste Intervall

35

Intervall Scheduling

Strategie 2:� Wähle immer das kürzeste Intervall

36

Intervall Scheduling

Strategie 2:� Wähle immer das kürzeste Intervall

Optimalität?

37

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

98

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