lausthal Informatik II reedy-algorithmen. Zachmann lausthal University, ermany zach@in.tu-clausthal.de Erinnerung: Dynamische Programmierung Zusammenfassung der grundlegenden Idee: Optimale Sub-Struktur: optimale Lösung des Problems besteht aus optimalen Lösungen der Unterprobleme Sich überschneidende Unterprobleme: insgesamt wenige Unterprobleme, viele wiederkehrende Instanzen dieser Unterprobleme Löse bottom-up, erstelle Tabelle mit gelösten Unterproblemen, die zur Lösung größerer benötigt werden Variationen: Tabelle kann -dimensional, dreieckig, ein Baum usw. sein Bottom-Up oder Top-Down. Zachmann Informatik - SS 06 reedy-algorithmen
reedy-algorithmen greedy gierig rundidee: konstruiere Lösung schrittweise (iterativ) wähle in jedem Schritt die am besten erscheinende Alternative eine Entscheidung wird nie revidiert ("blicke nicht zurück") Hoffnung: eine lokal optimale Lösung führt zu einer global optimalen Lösung Dynamische Programmierung kann "Overkill" sein, reedy- Algorithmen sind oft einfacher zu implementieren reedy-algorithmen sind nicht immer korrekt/optimal/gut. Zachmann Informatik - SS 06 reedy-algorithmen Activity-Selection-Problem Beispiel: in einem Vergnügungspark das "Meiste mitnehmen" Eine Karte ermöglicht das Benutzen aller Attraktionen Attraktionen starten und enden zu unterschiedlichen Zeiten Ziel: so viele Attraktionen wie möglich besuchen (eine anderes Ziel wäre, so viel Zeit wie möglich in Attraktionen zu verbringen) Activity-Selection-Problem Formal: sei S = { (s i,f i ) i = n } eine Menge von n Aktivitäten s i / f i = Startzeit / Endzeit von Aktivität i Aufgabe: finde größte Menge A S mit kompatiblen Aktivitäten obda sei f f f n - Falls nicht: sortiere Aktivitäten in O(n log n) oder O(n) gemäß f i 5 4 6 t. Zachmann Informatik - SS 06 reedy-algorithmen 4
Beispiel 0 4 5 6 7 8 9 0 4 Wieviel Aktivitäten können ausgeführt werden? 0 4 5 6 7 8 9 0 4 Wie lässt sich Korrektheit beweisen?. Zachmann Informatik - SS 06 reedy-algorithmen 5 Optimale Unterstruktur Sei A eine optimale Lösung Behauptung: Sei k die minimale Aktivität in A (d.h. genau die, die die früheste Endzeit hat), dann ist A \ {k} eine maximale Lösung für S'= {i S : s i f k } in Worten: wenn Aktivität a =(s k,f k ) S (richtig) gewählt ist, reduziert sich das Problem darauf, die maximale Lösung für diejenigen Aktivitäten S' S zu finden, die zu Aktivität a S "passen" Beweis: Ann.: wir finden B = maximale Lösung zu S' mit B > A \ {k} dann ist B {k} passend und eine maximale Lösung zu S B {k} > A A war nicht maximale Lösung. Zachmann Informatik - SS 06 reedy-algorithmen 6
Wiederkehrende Unterprobleme Betrachte rekursiven Algorithmus, der alle verträglichen Untermengen untersucht, um die maximale Menge zu finden Beachte die sich wiederholenden Unterprobleme: S A? S A? S - {} A? S S - {} S S - {,} Dynamische Programmierung? Memoisierung? Ja, aber. Zachmann Informatik - SS 06 reedy-algorithmen 7 reedy-hoice-eigenschaft Actitity-Selection-Problem zeigt auch die reedy-hoice- Eigenschaft: lokal optimale Auswahl global optimale Lösung Lemma: wenn S ein, nach der Endzeit sortiertes, Activity-Selection-Problem ist, dann ex. eine optimale Lösung A S, so daß { (s,f ) } A Beweisskizze: wenn eine optimale Lösung B existiert, die { (s,f ) } nicht enthält, kann die erste Aktivität in B ( z.b. (s,f ) ) immer durch (s,f ) ersetzt werden gleiche Anzahl an Aktivitäten, also optimal. Zachmann Informatik - SS 06 reedy-algorithmen 8 4
reedy-algorithmus für das ASP Eigentlicher Algorithmus ist einfach:. sortiere Aktivitäten nach Endzeit. lege die erste Aktivität fest (also (s,f ), d.h. diejenige, die am frühesten wieder endet). entferne alle Aktivitäten aus der sortierten Liste, die vor der Endzeit von f starten (also nicht kompatibel sind) wiederhole, bis keine Aktivitäten mehr übrig sind Intuition ist noch einfacher: nimm immer die Aktivität mit der geringsten Dauer, die gerade als nächstes beginnt Implementierung: sortiere s & f bzgl f[*] A = [] # solution array i = 0 # last finished a. for k in range(, n ): if s[k] >= f[i]: # "exec" this a. next A.append( (s[k],f[k]) ) i = k return A. Zachmann Informatik - SS 06 reedy-algorithmen 9 Erinnerung: Knapsack-Problem 0--Knapsack-Problem: ein Dieb muß aus n egenständen wählen, wobei der i-te egenstand den Wert v i und das ewicht w i besitzt maximiere den esamtwert bei vorgegebenem Höchstgewicht W - w i und W sind anzzahlen - "0-": jeder egenstand muß komplett genommen oder dagelassen werden Abwandlung: fraktionales KP (fractional KP) Dieb kann Teile von egenständen nehmen Z.B.: oldbarren beim 0--Problem und oldstaub beim fraktionalen Problem. Zachmann Informatik - SS 06 reedy-algorithmen 0 5
Fraktionales Rucksack-Problem egeben: n egenstände, i-ter egenstand hat ewicht w i und Wert v i, ewichtsschranke W esucht: # Ann.: Array enthält Instanzen der Klasse Item # Jedes Item [i] hat Instanz-Var.s [i].w und [i].v def fract_knapsack(, w_max ): sortiere absteigend nach [i].v/[i].w w = 0 # bislang "belegtes" esamtgewicht for i in range( 0, len() ): if [i].w <= w_max - w: q[i] = w += [i].w else: q[i] = (w_max w) / [i].w w = w_max return q. Zachmann Informatik - SS 06 reedy-algorithmen Korrektheit Hier nur Beweisidee reedy-algorithmus erzeugt Lösungen der Form (,,, q *, 0,, 0) Ann.: es ex. bessere Lösung (q',, q' m ); diese hat die Form (,,, q' *,, q' *, 0,, 0) Zeige, daß man aus dieser Lösung eine andere Lösung (q'',, q'' m ) konstruieren kann, die dasselbe ewicht hat, aber größeren Wert, und mehr -en oder mehr 0-en. Zachmann Informatik - SS 06 reedy-algorithmen 6
Achtung: Der reedy-algorithmus funktioniert nicht für das 0--Rucksack-Problem egenbeispiel: W = 50 egenstand ewicht Wert v i / w i 0 60 6 0 00 5 0 0 4 reedy: + optimal: +. Zachmann Informatik - SS 06 reedy-algorithmen Elemente der reedy-strategie reedy-hoice-eigenschaft: global optimale Lösung kann durch lokal optimale (greedy) Auswahl erreichet werden Optimale (reedy-)unterstruktur: Eine optimale Lösung eines Problems enthält eine optimale Lösung eines Unterproblems M.a.W.: es ist möglich zu zeigen: wenn eine optimale Lösung A Element s i enthält, dann ist A' = A \ {s i } eine optimale Lösung eines kleineren Problems (ohne s i und evtl. ohne einige weitere Elemente) - Bsp. ASP: A \ {k} ist optimale Lösung für S'. Zachmann Informatik - SS 06 reedy-algorithmen 4 7
Optimale (reedy-)unterstruktur (Forts.): Man muß nicht alle möglichen Unterprobleme durchprobieren (wie bei Dyn.Progr.) es genügt, das "nächstbeste" Element in die Lösung aufzunehmen, wenn man nur das richtige lokale(!) Kriterium hat - Bsp. ASP: wähle "vorderstes" f i Möglicherweise ist eine Vorbehandlung der Eingabe nötig, um die lokale Auswahlfunktion effizient zu machen - Bsp. ASP: sortiere Aktivitäten nach Endzeit. Zachmann Informatik - SS 06 reedy-algorithmen 5 Abstrakte Formulierung des Algos Die Auswahl-Funktion basiert für gewöhnlich auf der Zielfunktion, sie können identisch sein, oft gibt es unterschiedliche plausible Bsp. ASP: - Zielfunktion = Anzahl Aktivitäten (Max gesucht) - Auswahl-Funktion = kleinstes f i S' # = Menge aller Kandidaten # select = Auswahlfunktion S = [] # Menge mit Lösung while not solution(s) and!= []: x = Element aus, das select(x) maximiert = \ x if feasible(s,x): # is x compatible with S? S += x if solution(s): return S else: return keine Lösung. Zachmann Informatik - SS 06 reedy-algorithmen 6 8
Scheduling in (Betriebs-) Systemen Ein einzelner Dienstleister (ein Prozessor, eine aspumpe, ein Kassierer in einer Bank, usw.) hat n Kunden zu bedienen Die Zeit, die für jeden Kunden benötigt wird, ist vorab bekannt: Kunde i benötigt die Zeit t i, i n Ziel: esamtverweildauer aller Kunden im System minimieren M.a.W.: Minimierung der Funktion. Zachmann Informatik - SS 06 reedy-algorithmen 7 Beispiel Es gibt Kunden mit t = 5, t = 0, t = Reihenfolge T 5 + (5 + 0) + (5 + 0 + ) = 8 5 + (5 + ) + (5 + + 0) = 0 + (0 + 5) + (0 + 5 + ) = 4 0 + (0 + ) + (0 + + 5) = 4 + ( + 5) + ( + 5 + 0) = 9 optimal + ( + 0) + ( + 0 + 5) = 4. Zachmann Informatik - SS 06 reedy-algorithmen 8 9
Algorithmenentwurf Betrachte einen Algorithmus, der den optimalen Schedule Schritt für Schritt erstellt Angenommen, nach der Bedienung der Kunden i,, i m ist Kunde j an der Reihe; die Zunahme von T auf dieser Stufe ist Um diese Zunahme zu minimieren, muß nur t j minimiert werden Das legt einen einfachen reedy-algorithmus nahe: füge bei jedem Schritt denjenigen Kunden, der die geringste Zeit benötigt, dem Schedule hinzu "shortest job first" Behauptung: Dieser Algorithmus ist immer optimal. Zachmann Informatik - SS 06 reedy-algorithmen 9 Optimalitätsbeweis Sei I = (i,, i n ) eine Permutation von {,,, n} Werden die Kunden in der Reigenfolge I bedient, dann ist die esamtverweildauer für alle Kunden zusammen. Zachmann Informatik - SS 06 reedy-algorithmen 0 0
Jetzt wird angenommen, daß in I zwei Zahlen a, b gefunden werden können, mit a < b und t ia > t ib Durch Vertauschung dieser beiden Kunden ergibt sich eine neue Bedienungsreigenfolge I', die besser ist, weil. Zachmann Informatik - SS 06 reedy-algorithmen Bedienreihenfolge a b n bedienter Kunde i i a i b i n Bedienzeit t i t ia t ib t in nach Austausch und von t ia und t ib Bedienzeit t i t ib t ia t in bedienter Kunde i i b i a i n. Zachmann Informatik - SS 06 reedy-algorithmen