ADS: Algorithmen und Datenstrukturen 2

Ähnliche Dokumente
ADS: Algorithmen und Datenstrukturen 2

ADS: Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen 2

ADS: Algorithmen und Datenstrukturen 2

Algorithmen und Komplexität

Das Problem des Handlungsreisenden

Wiederholung. Divide & Conquer Strategie

Informatik II: Algorithmen und Datenstrukturen SS 2013

Theoretische Informatik III (Winter 2018/19) Prof. Dr. Ulrich Hertrampf. Noch einmal TSP

19. Dynamic Programming I

Algorithmen und Datenstrukturen 1 Kapitel 3

Datenstrukturen & Algorithmen

5.4 Das Rucksackproblem

19. Dynamic Programming I

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Dynamische Programmierung

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Formulierung mittels Dynamischer Programmierung

Rückblick: divide and conquer

Dynamische Programmierung II

Algorithmen und Datenstrukturen 2

9.2 Invertierbare Matrizen

Algorithmen und Datenstrukturen (für ET/IT)

Kapitel 5: Dynamisches Programmieren Gliederung

Algorithmen und Datenstrukturen

Optimierung. Algorithmik III Algorithmen und Modelle für kontinuierliche Datenstrukturen. Vorgehen: Dynamische Programmierung

8.2 Invertierbare Matrizen

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

Algorithmen und Datenstrukturen (für ET/IT)

1 Einführung. 2 Grundlagen von Algorithmen. 3 Grundlagen von Datenstrukturen. 4 Grundlagen der Korrektheit von Algorithmen

ADS: Algorithmen und Datenstrukturen 2

8.2 Invertierbare Matrizen

Algorithmen auf Sequenzen

19. Dynamic Programming I

Suchen in Texten. Naives Suchen Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuchen Editierdistanz

Einstieg in die Informatik mit Java

Komplexität von Algorithmen:

ADS: Algorithmen und Datenstrukturen 2

Theoretische Informatik 1

Algorithmen und Datenstrukturen (für ET/IT)

Informatik II, SS 2016

Algorithmen und Datenstrukturen 2 VU 3.0 Nachtragstest SS Oktober 2016

Algorithmen und Datenstrukturen 2

ADS: Algorithmen und Datenstrukturen 2

6. Algorithmen auf Zeichenketten

Theoretische Informatik 1

Klausur Algorithmentheorie

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme

Algorithmen I - Tutorium 28 Nr. 12

Das Rucksackproblem: schwache NP-Härte und Approximation

Einführung in die Objektorientierte Programmierung Vorlesung 17: Dynamische Programmierung. Sebastian Küpper

0 i = n w n > k v n. V (i +1,k), max v i + V (i +1,k w i )

Konzepte der Informatik

Ein Dieb raubt einen Laden aus; um möglichst flexibel zu sein, hat er für die Beute nur einen Rucksack dabei

Probleme aus NP und die polynomielle Reduktion

Konzepte der Informatik

19. Dynamic Programming I

a 11 a 12 a 1(m 1) a 1m a n1 a n2 a n(m 1) a nm Matrizen Betrachten wir das nachfolgende Rechteckschema:

In diesem Abschnitt betrachten wir nur quadratische Matrizen mit Komponenten aus einem Körper K, also A K n n für ein n N. Wenn (mit einem n > 1)

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

ADS: Algorithmen und Datenstrukturen 1

4. Übungsblatt zur Mathematik II für Inf, WInf

Approximationsalgorithmen für NP-harte Optimierungsprobleme

Approximationsalgorithmen für NP-harte Optimierungsprobleme

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen (für ET/IT)

3 Matrizenrechnung. 3. November

Teil I. Lineare Algebra I Vorlesung Sommersemester Olga Holtz. MA 378 Sprechstunde Fr und n.v.

2.2 Kollineare und koplanare Vektoren

Basiswissen Matrizen

Dynamische Optimierung

Multiplikation von Matrizen

5.2 Rechnen mit Matrizen

Partialbruchzerlegung

20. Dynamic Programming II

Übersicht. Aktivitäten-Auswahl-Problem. Greedy Algorithmen. Aktivitäten-Auswahl-Problem. Aktivitäten-Auswahl-Problem. Datenstrukturen & Algorithmen

G. Zachmann Clausthal University, Germany Die wichtigsten Entwurfsverfahren für Algorithmen:

Lineare Gleichungssysteme: direkte Verfahren

Schnelle Multiplikation

11. Übung Algorithmen I

Vorkurs Informatik WiSe 16/17

ABITURPRÜFUNG 2001 LEISTUNGSFACH INFORMATIK (HAUPTTERMIN)

Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 07 Beispiellösung Blatt 5

Algorithmische Bioinformatik 1

3.3 Optimale binäre Suchbäume

Theorie der Informatik Übersicht. Theorie der Informatik SAT Graphenprobleme Routing-Probleme. 21.

Chr.Nelius: Lineare Algebra (SS 2008) 1. 4: Matrizenrechnung. c ik := a ik + b ik. A := ( a ik ). A B := A + ( B). ist A =

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Der Dreyfus-Wagner Algorithmus für das Steiner Baum Problem

Methoden für den Entwurf von Algorithmen

Algorithmen und Datenstrukturen in der Bioinformatik Zweites Übungsblatt WS 05/06 Musterlösung

Informatik II, SS 2014

Informatik II, SS 2018

20. Dynamic Programming II

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Transkript:

.. ADS: Algorithmen und Datenstrukturen 2 8. Vorlesung Uwe Quasthoff Abteilung Automatische Sprachverarbeitung Institut für Informatik Universität Leipzig 6. Juni 2012 1 / 25

Editier-Distanz Beobachtungen: Jede optimale Folge von Editier-Operationen ändert jedes Zeichen höchstens einmal Jede Zerlegung einer optimalen Anordnung führt zur optimalen Anordnung der entsprechenden Teilsequenzen Konstruktion der optimalen Gesamtlösung durch rekursive Kombination von Lösungen für Teilprobleme Dynamische Programmierung 2 / 25

Editier-Distanz Ansatz: Betrachte Editier-Distanzen von Präfixen. D ij sei die Editierdistanz für die Präfixe (a 1,..., a i ) und (b 1,..., b j ); 0 i n; 0 j m. Wie sieht ein zu D ij gehöriges Alignment aus? Letzte Position: (a i, b j ) oder (a i, ) oder (, b j ) Davor: optimale Alignments der entsprechenden Präfixe. Rekursion: D i 1,j 1 + s(a i, b j ) D ij = min D i 1,j + s(a i, ) D i,j 1 + s(, b j ) Triviale Lösungen für leere Präfixe: D 0,0 = s(, ) = 0; D 0,j = j j =1 s(, b j ); D i,0 = i i =1 s(a i, ) 3 / 25

Editierdistanz j 0 1 2 3 i - R A D 0-0 1 2 3 1 A 1 1 1 2 2 U 2 2 2 2 3 T 3 3 3 3 4 O 4 4 4 4 Jeder Weg von links oben nach rechts unten entspricht einer Folge von Edit-Operationen, die a in b transformiert Möglicherweise mehrere Pfade mit minimalen Kosten Komplexität: O(n m) 4 / 25

Dynamische Programmierung Grundlage: Das Prinzip Teile und Herrsche Um ein umfangreiches Problem zu lösen, zerlege man es in kleinere Probleme, die unabhängig voneinander gelöst werden können. In der dynamischen Programmierung wird dieses Prinzip bis zum Extrem weiterentwickelt: Wenn nicht bekannt ist, welche kleineren Probleme zu lösen sind, löst man einfach alle und speichert dann die Ergebnisse zum Zwecke der späteren Verwendung bei der Lösung größerer Probleme. 5 / 25

Prinzip Dynamische Programmierung 1. Charakterisiere den Lösungsraum und die Struktur der intendierten optimalen Lösung 2. Definiere rekursiv, wie sich eine optimale Lösung (und der ihr zugeordnete Wert) aus kleineren optimalen Lösungen (und deren Werte) zusammensetzt. 3. Konzipiere den Algorithmus in einer bottom-up Weise so, dass für n = 1, 2, 3,... tabellarisch optimale Teillösungen (und deren zugeordnete Werte) gefunden werden. Beim Finden einer bestimmten optimalen Teillösung der Größe k > 1 ist auf alle optimalen Teillösungen der Größe < k zurückzugreifen. Voraussetzung: Bellmannsches Optimalitätsprinzip Die optimale Lösung für ein Problem der Größe n setzt sich aus optimalen Teillösungen kleinerer Größe zusammen. 6 / 25

Prinzip Dynamische Programmierung Wann funktioniert dynamische Programmierung? Erstens muss es nicht immer möglich sein, die Lösungen kleinerer Probleme so zu kombinieren, dass sich die Lösung eines größeren Problems ergibt. Zweitens kann die Anzahl der zu lösenden Probleme unvertretbar groß sein. Es ist noch nicht gelungen, genau anzugeben, welche Probleme mit Hilfe der dynamischen Programmierung in effizienter Weise gelöst werden können. Es gibt viele schwierige Probleme, für die sie nicht anwendbar zu sein scheint, aber auch viele leichte Probleme, für die sie weniger effizient ist als Standardalgorithmen. Systematische Theorie wurde in den letzten Jahren vor allem von Robert Giegerich in Bielefeld entwickelt: Zerlegung des Problems... Grammatik Zerlegung der Kostenfunktion... Algebra Optimierung... Auswahlregel 7 / 25

Matrix-Produkte Ein klassischer Anwendungsfall der dynamischen Programmierung ist das Problem der Minimierung des Rechenaufwands, der für die Multiplikation einer Reihe von Matrizen unterschiedlicher Dimension erforderlich ist. a 11 a 12 ( ) a 21 a 22 b11 b 12 b 11 ) ( 13 c f11 f 12 f 13 a 31 a 32 a 41 a 42 b 21 b 22 b 23 c 21 c 31 ( d 11 d 12 ) ( e 11 e 12 e 21 e 22 f 21 f 22 f 23 Ziel: Multiplikation der 6 Matrizen. Die Anzahl der Spalten in einer Matrix muss stets mit der Anzahl der Zeilen in der folgenden Matrix übereinstimmen, damit die Multiplikation ausführbar ist. ) 8 / 25

Matrix-Produkte Aufwand um eine (p q) mit einer (q r) Matrix zu multiplizieren: p r Einträge, deren jeder q skalare Multiplikationen und Additionen erfordert, also proportional zu pqr. Im Beispiel: M 1 = AB... 4 2 3 = 24 M 2 = M 1 C... 4 3 1 = 12 M 3 = M 2 D... 4 1 2 = 8... insgesamt 84 Anders rum: N 5 = EF, N 4 = DN 5, N 3 = CN 4,... nur 69 Skalarmultiplikationen! Es gibt noch viele weitere Möglichkeiten: 9 / 25

Matrix-Produkte Klammern bestimmen Reihenfolge der Multiplikation: Reihenfolge von links nach rechts entspricht Ausdruck ( ( ( ( ( AB ) C ) D ) E ) F ) Reihenfolge von rechts nach links entspricht Ausdruck ( A ( B ( C ( D ( EF ) ) ) ) ) Jedes zulässige Setzen von Klammern führt zum richtigen Ergebnis Wann ist die Anzahl der Multiplikationen am kleinsten? Wenn große Matrizen auftreten, können beträchtliche Einsparungen erzielt werden: Wenn z. B. die Matrizen B, C und F im obigen Beispiel eine Dimension von 300 statt von 3 besitzen, sind bei der Reihenfolge von links nach rechts 6024 Multiplikationen erforderlich, bei der Reihenfolge von rechts nach links dagegen ist die viel größere Zahl von 274 200 Multiplikationen auszuführen. 10 / 25

Matrix-Produkte Allgemeiner Fall: n Matrizen sind miteinander zu multiplizieren: M 1 M 2 M 3...M n wobei für jede Matrix M i, 1 i < n, gilt: M i hat r i Zeilen und r i+1 Spalten. Ziel: Diejenige Reihenfolge der Multiplikation der Matrizen zu finden, für die die Gesamtzahl der auszuführenden Skalar-Multiplikationen minimal wird. Die Lösung des Problems mit Hilfe der dynamischen Programmierung besteht darin, von unten nach oben vorzugehen und berechnete Lösungen kleiner Teilprobleme zu speichern, um eine wiederholte Rechnung zu vermeiden. Was ist der beste Weg das Teilprodukt M k M k+1... M l 1 M l zu berechnen? 11 / 25

Beschreibung des Algorithmus 1 Berechnung der Kosten für Multiplikation benachbarter Matrizen und Speicherung in einer Tabelle. Berechnung der Kosten für Multiplikation von 3 aufeinanderfolgenden Matrizen. z. B. beste Möglichkeit, M 1 M 2 M 3 zu multiplizieren: Entnimm der gespeicherten Tabelle die Kosten der Berechnung von M 1 M 2 und addiere die Kosten der Multiplikation dieses Ergebnisses mit M 3. Entnimm der gespeicherten Tabelle die Kosten der Berechnung von M 2 M 3 und addiere die Kosten der Multiplikation dieses Ergebnisses mit M 1. Vergleich der Ergebnisse und Abspeichern der besseren Variante. 12 / 25

Beschreibung des Algorithmus 2 Berechnung der Kosten für Multiplikation von 4 aufeinanderfolgenden Matrizen. z. B. beste Möglichkeit, M 1 M 2 M 3 M 4 zu multiplizieren: Entnimm der gespeicherten Tabelle die Kosten der Berechnung von M 1 M 2 M 3 und addiere die Kosten der Multiplikation dieses Ergebnisses mit M 4. Entnimm der gespeicherten Tabelle die Kosten der Berechnung von M 2 M 3 M 4 und addiere die Kosten der Multiplikation dieses Ergebnisses mit M 1. Entnimm der gespeicherten Tabelle die Kosten der Berechnung von M 1 M 2 sowie von M 3 M 4 und addiere dazu die Kosten der Multiplikation dieser beiden Ergebnisse. Vergleich der Ergebnisse und Abspeicherung der besseren Variante.... Indem man in dieser Weise fortfährt, findet man schließlich die beste Möglichkeit, alle Matrizen miteinander zu multiplizieren. 13 / 25

Allgemeine Matrix-Produkte (M k M k+1... M l 1 M l ) = (M k M k+1... M i 1 )(M i M i+1... M l 1 M l ) Sei also C ij der minimale Aufwand für die Berechnung des Teilproduktes M i M i+1... M j 1 M j. C ii = 0, Produkt besteht aus nur einem Faktor, es ist nichts zu tun. M k M k+1... M i 1 is eine r k r i Matrix M i M i+1... M l 1 M l is eine r i r l+1 Matrix Produkt dieser beiden Faktoren benötig daher r k r i r l+1 Operationen. Die beste Zerlegung von (M k M k+1... M l 1 M l ) ist daher diejenige, die die Summe C k,i 1 + C i,l + r k r i r l+1 minimiert. Daher Rekursion (k < l): C kl = Lösung des Gesamtproblems: C 1n. min i:k<i l C k,i 1 + C i,l + r k r i r l+1 14 / 25

Matrix Multiplikation A B C D E F A 0 24 14 22 26 36 [A][B] [A][BC] [ABC][D] [ABC][DE] [ABC][DEF] B 0 6 10 14 22 [B][C] [BC][D] [BC][DE] [BC][DEF] C 0 6 10 19 [C][D] [C][DE] [C][DEF] D 0 4 10 [D][E] [DE][F] E 0 12 [E][F] F 0 Mit Hilfe der dynamischen Programmierung kann das Problem der Multiplikation mehrerer Matrizen in einer zu n 3 proportionalen Zeit und mit einem zu n 2 proportionalen Speicheraufwand gelöst werden. 15 / 25

Beschreibung zur Tabelle Sie zeigt den Ablauf des oben gezeigten Algorithmus für das angegebene Beispiel. Sie gibt die Gesamtkosten und die optimale letzte Multiplikation für jede Teilfolge in der Liste der Matrizen an. Z. B. besagt die Eintragung in der Zeile A und der Spalte F, dass 36 Skalar-Multiplikationen erforderlich sind, um die Matrizen A bis F zu multiplizieren. Dies wird erreicht, indem A bis C auf optimale Weise multipliziert werden, dann D bis F auf optimale Weise multipliziert werden und danach die erhaltenen Matrizen miteinander multipliziert werden. Für obiges Beispiel ist die ermittelte Anordnung der Klammern ( (A ( BC ) )( ( DE ) F ), wofür nur 36 Skalar-Multiplikationen benötigt werden. Für das Beispiel, wo die Dimension von 3 auf 300 geändert wurde, ist die gleiche Anordnung der Klammern optimal, wobei hier 2412 Skalar-Multiplikationen erforderlich sind. 16 / 25

Traveling Salesman Problem (TSP) Gegeben: n Städte, Entfernungsmatrix M = (m ij ), m ij Entfernung von Stadt i nach Stadt j. Gesucht: Rundreise über alle Städte mit minimaler Länge, also Permutation π : (1,..., n) (1,..., n). c(π) = m π(n)π(1) + n i=1 n 1m π(i)π(i+1) NP-vollständig (Rechenzeit mit großer Sicherheit exponentiell) Naiver Algorithmus: Alle (n 1)! Reihenfolgen betrachten. 17 / 25

Traveling Salesman Problem (TSP) Dynamische Programmierung für TSP Sei g(i, S) Länge des kürzesten Weges von Stadt i über jede Stadt in der Menge S (jeweils genau ein Besuch) nach Stadt 1. Lösung des TSP also g(1, 2,..., n). (Stadt 1 kann beliebig gewählt werden, da Rundreise gesucht wird.) Es gilt: g(i, S) = { m i1 min j S m ij + g(j, S \ {j}) falls S = sonst 18 / 25

Traveling Salesman Problem (TSP) for ( i = 2 ; i = n; i++) g[i,{}] = m[i,1] for ( k = 1; k = n-2 ; k++ ) for (S, S = k, 1 not in S ) for (i in {2,...,n}-S ) Berechne g[i,s] gemäß Formel Berechne g[1,{ 2,...,n }] gemäß Formel Komplexität: Tabellengröße Aufwand je Tabelleneintrag Größe: < n2 n (Anzahl der i s mal Anzahl betrachtete Teilmengen) Tabelleneintrag: Suche nach Minimum unter j aus S: O(n) Insgesamt: O(n 2 2 n ), deutlich besser als (n 1)!. 19 / 25

Warum Dynamische Programmierung nützlich ist An einer völlig hypothetischen Universität ist es üblich, dass in Klausuren viel mehr Aufgaben gestellt werden als in der der vorgebenen Zeit t gelöst werden können. Ein ebenfalls völlig hypothetischer Student möchte nun seinen Punktestand optimieren. Welche Aufgaben sollten bearbeitet werden? Für jede Aufgabe i {1,..., n} kennen wir die Bearbeitungszeit t i und die dafür erreichbare Punktezahl p i. Die Aufgabe besteht also darin, eine Teilmenge S {1,..., n} zu finden, so dass p i max während t i t i S Üblicherweise lässt man stattdessen einen Dieb mit Rucksack, der ein Fassungsvermögen t, Gegenstände mit Wert p i und Volumen t i aus einem Tresor klauen und vor der Polizei davonlaufen... weswegen das Problem Rucksackproblem und nicht Klausurproblem heisst. i S 20 / 25

Rucksackproblem Ein Dieb, der einen Safe ausraubt, findet in ihm N Typen von Gegenständen unterschiedlicher Größe size j und unterschiedlichen Werts cost j, hat aber nur einen kleinen Rucksack der Größe M zur Verfügung, um die Gegenstände zu tragen. Das Rucksack-Problem besteht darin, diejenige Kombination von Gegenständen zu finden, die der Dieb für seinen Rucksack auswählen sollte, so dass der Gesamtwert der von ihm geraubten Gegenstände maximal wird. Sei best m der maximale Wert, der bis bei einer Rucksackgröße m erreicht werden kann. Wenn dier zuletzt eingepackte Gegenstand vom Typ j ist, so ist das beste Ergebnis, das erzielt werden kann, offensichtlich cost j + best m sizej. Also: best m = max j (cost j + best m sizej ) 21 / 25

Rucksackproblem Effiziente Berechnung, indem die Operationen in einer zweckmäßigen Reihenfolge ausgeführt werden: cost... Punktezahl; size... Zeitaufwand; val[j]... Wert (Punkte) der Aufgabe j for ( j = 1 ; j <= N ; j ++ ) { for ( i = 1 ; i <= M ; i++ ) { if ( i >= size[j] ) { if ( cost[i] < cost[i - size[j]] + val[j] ) { cost[i] = cost[i - size[j]] + val[j] ; best[i] = j ; } } } } 22 / 25

Rucksackproblem Bezeichnung A B C D E Wert 4 5 10 11 13 Aufwand 3 4 7 8 9 Lösung des Rucksack-Beispiels: k 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 j = 1 cost [k] 0 0 4 4 4 8 8 8 12 12 12 16 16 16 20 20 20 best [k] - - A A A A A A A A A A A A A A A j = 2 cost [k] 0 0 4 5 5 8 9 10 12 13 14 16 17 18 20 21 22 best [k] - - A B B A B B A B B A B B A B B j = 3 cost [k] 0 0 4 5 5 8 10 10 12 14 15 16 18 20 20 22 24 best [k] - - A B B A C B A C C A C C A C C j = 4 cost [k] 0 0 4 5 5 8 10 11 12 14 15 16 18 20 21 22 24 best [k] - - A B B A C D A C C A C C D C C j = 5 cost [k] 0 0 4 5 5 8 10 11 13 14 15 17 18 20 21 23 24 best [k] - - A B B A C D E C C E C C D E C 23 / 25

Rucksack Problem: Beispiel Das erste Zeilenpaar zeigt den maximalen Wert (den Inhalt der Felder cost und best), wenn nur Elemente A benutzt werden. Das zweite Zeilenpaar zeigt den maximalen Wert, wenn nur Elemente A und B verwendet werden, usw. Der höchste Wert, der mit einem Rucksack der Größe 17 erreicht werden kann, ist 24. Im Verlaufe der Berechnung dieses Ergebnisses hat man auch viele Teilprobleme gelöst, z. B. ist der größte Wert, der mit einem Rucksack der Größe 16 erreicht werden kann, 22, wenn nur Elemente A, B und C verwendet werden. Der tatsächliche Inhalt des optimalen Rucksacks kann mit Hilfe des Feldes best berechnet werden. Per Definition ist best[m] in ihm enthalten, und der restliche Inhalt ist der gleiche wie im optimalen Rucksack der Größe M - size [best [M]] usw. 24 / 25

Rucksack Problem: Eigenschaften Für die Lösung des Rucksack-Problems mit Hilfe der dynamischen Programmierung wird eine zu N M proportionale Zeit benötigt. Somit kann das Rucksack-Problem leicht gelöst werden, wenn M nicht groß ist; für große Fassungsvermögen kann die Laufzeit jedoch unvertretbar groß werden. Eine grundlegende Schwierigkeit ist es, dass das Verfahren nicht anwendbar ist, wenn M sehr viele verschiedene Werte annehmen kann, z.b., wenn Größe oder Wert der Objekte beliebige z. B. reelle Zahlen anstatt (kleiner) ganzer Zahlen sind. Wenn jedoch die Fassungsvermögen sowie die Größen und Werte der Gegenstände ganze Zahlen sind, so gilt das grundlegende Prinzip, dass optimale Entscheidungen nicht geändert werden müssen, nachdem sie einmal getroffen wurden. Jedesmal, wenn dieses allgemeine Prinzip zur Anwendung gebracht werden kann, ist die dynamische Programmierung anwendbar. 25 / 25