Programmieren, Algorithmen und Datenstrukturen II 8. Allgemeine Lösungsverfahren
|
|
- Herbert Fürst
- vor 8 Jahren
- Abrufe
Transkript
1 Programmieren, Algorithmen und Datenstrukturen II 8. Allgemeine Lösungsverfahren 1
2 Übersicht 1. Ziele des Kapitels 2. Bereits behandelte Lösungsstrategien 3. Backtracking 4. Branch-and-Bound 5. Weiterführende Lösungsstrategien 2
3 1. Ziele des Kapitels Kapitel C++ und SW Engineering Algorithmen und Datenstrukturen 1 2 Ein- / Ausgabe mit Dateien, Ausnahmebehandlung Vererbung 4 3 Abstrakte Datentypen + Klassen-Templates Überladen von Operatoren 5 Sortieren und Suchen 6 Bäume 7 Graphen 8 Allgemeine Lösungsverfahren 3
4 1. Ziele des Kapitels Dieses Kapitel richtet sich besonders an die Lösung von Problemen, für die (noch) kein (offensichtlicher) Algorithmus existiert. Hierfür werden Standard- Verfahren wie Backtracking oder Branch-and-Bound heran gezogen, die einem allgemeinen Schema folgen und somit universell einsetzbar sind. Hiermit ist es möglich je nach Problemstellung irgendeine, alle oder die optimale Lösung zu finden. In diesem Zusammenhang kommen weitere algorithmische Standard-Problem (z.b. das Rucksack-Problem) zur Sprache. 4
5 2. Bereits behandelte Lösungsstrategien 2.1 Divide-and-Conquer Divide-and-Conquer (D&C) ist in dieser Veranstaltung bereits des öfteren vorgestellt und angewendet worden: Ein Problem wird solange (rekursiv) zerlegt, bis man bei einer einfach zu lösenden atomaren Größe angelangt ist. Danach werden die Einzellösungen zu jeweils größeren kombiniert. Vor- und Nachteile: D&C-Ansätze sind immer sehr speziell an einem Problem orientiert, d.h. es gibt keine allgemeine Standard-Vorgehensweise. Sehr gute Resultate werden erzielt z.b. beim MergeSort und Quicksort Schlechte hingegen z.b. bei der Berechnung der Fibonacci-Zahlen 5
6 2. Bereits behandelte Lösungsstrategien 2.2 Dynamische Programmierung Dynamische Programmierung (DP) bedeutet: Zuerst die Lösungen der kleinsten Teilprobleme direkt zu berechnen, und diese dann geeignet zu einer Lösung eines nächstgrößeren Teilproblems zusammenzusetzen. Einmal berechnete Teilergebnisse werden in einer Tabelle gespeichert, so dass nachfolgende Berechnungen gleichartiger Teilprobleme auf diese zurückgreifen können (anstatt sie jedes Mal neu zu berechnen). Vor- und Nachteile: Im Vergleich zu D&C, vermeidet DP kostspielige Rekursionen, weil bekannte Teilergebnisse wiederverwendet werden. DP-Ansätze sind immer sehr speziell an einem Problem orientiert und bedürfen einer fundierten mathematischen Grundlage. Fehlt diese oder ändert sich die Problemstellung auch nur geringfügig ist DP nicht anwendbar. Mit DP lassen sich sehr effiziente Lösungen erzielen (z.b. Fibonacci- Zahlen, Kürzeste Wege) 6
7 3. Backtracking In der allgemeinen Problemlösung geht es darum, einen Algorithmus zum Finden von Lösungen einer Gruppe von Problemen zu bestimmen und zwar nicht durch Befolgen einer direkten Vorschrift für die Berechnung, sondern durch Ausprobieren (trial and error). Solche Algorithmen sind erst seit dem Beginn des Computer-Zeitalters von Bedeutung. Wir betrachten: das Finden (irgend) einer Lösung das Finden aller Lösungen das Finden der/einer optimalen Lösung 7
8 3. Backtracking 3.1 Das Damen Problem Dies wird dargestellt mit Hilfe eines algorithmischen Klassikers: Es sollen jeweils acht Damen auf einem Schachbrett so aufgestellt werden, dass keine zwei Damen einander nach den Schachregeln schlagen können. Oder anders ausgedrückt: Es sollen sich keine zwei Damen die gleiche Reihe, Linie oder Diagonale teilen. Das Problem kann auf Schachbretter beliebiger Größe verallgemeinert werden. Dann gilt es, n Damen auf einem Brett von n x n Feldern zu positionieren. Für n=8 hat das Damenproblem 92 verschiedene Lösungen. Betrachtet man Lösungen als gleich, die sich durch Spiegelung oder Drehung des Brettes aus einander ergeben, verbleiben noch zwölf Lösungen. 8
9 3. Backtracking 3.2 Irgendeine Lösung finden Oft ist man nur am Finden einer einzelnen Lösung interessiert, auch wenn es eigentlich mehrere gibt. Das Backtracking-Verfahren ist eine allgemeine Lösungsmethode dafür. Es funktioniert so, wie man sich den Ausweg aus einem Labyrinth vorstellen kann: Man geht solange in eine bestimmte Richtung, bis es nicht mehr weiter geht. Dann geht man zurück an eine Stelle, wo man bereits war und versucht es von dort aus in einen andere Richtung. Das Ziel eines Backtracking-Verfahrens ist es, n Schritte erfolgreich zu absolvieren, wobei es in jedem Schritte mehrere Alternativen geben kann, die erkunden werden müssen. Dies entspricht einer vollständigen Suche: wenn alle Alternativen in allen n Schritten untersucht worden sind, gibt es keine Lösung. Man beachte dabei, dass die gewählten Alternativen in vorherigen Schritten die der nachfolgenden beeinflussen. 9
10 3. Backtracking Man erhält folgenden Algorithmus in Form einer Funktion: VersucheDieNächstenSchritte( i i )) DO DO Wähle Wähle die die nächste nächste Alternative Alternative k k für für Schritt Schritt ii IF IF annehmbar annehmbar (i, (i, k) k) Zeichne Zeichne (i,k) (i,k) auf auf IF IF (i+1 (i+1 < n) n) // // d.h. d.h. Lösung Lösung noch noch unvollständig VersucheDieNächstenSchritte( i+1 i+1 )) IF IF NICHT NICHT erfolgreich erfolgreich Lösche Lösche die die Aufzeichnung (i,k) (i,k) WHILE WHILE (NICHT (NICHT erfolgreich erfolgreich UND UND NICHT NICHT alle alle Alternativen Alternativen untersucht) untersucht) Aufruf: VersucheDieNächstenSchritte( 0 ) 10
11 3. Backtracking Für das Damenproblem erhält man folgendes C++-Programm: bool TryNextSteps(int i) { // versuche Dame 'i' und folgende zu platzieren coord pos = nullpkt; // wähle erste Position bool success = false; do { if (acceptable(pos)) { set(i, pos); success = true; if (i + 1 < n) { // mache die nächsten Schritte (alle weiteren Damen): success = TryNextSteps(i + 1); // In Sackgasse gelaufen: mache letzten Schritt rückgängig if (!success) remove(pos); if (!success &&!pos.end()) // versuche es im nächsten Feld pos.next(); while (!success &&!pos.end()); return success; 11
12 3. Backtracking Das Schachbrett ist dabei ein zweidimensionales Array: class coord { public: coord(int px = 0, int py = 0) : x(px), y(py) { ; // Get-Methoden int X() { return x; ; int Y() { return y; ; void next() { // ein Feld weiter rücken x++; ; if (x == n) { x = 0; y++; bool end() { // letztes Feld erreicht return x == n - 1 && y == n - 1; ; bool valid() { // Koordinate liegt im Feld if (x < 0 x >= n) return false; if (y < 0 y >= n) return false; return true; private: int x; int y; ; const coord nullpkt(0, 0); int Field[n][n]; 12
13 3. Backtracking Mit den folgenden Hilfsfunktionen ist das Programm (fast) komplett: bool acceptable(coord pos) { // prüfe, ob weitere Dame an Position 'pos' stehen kann for (int i = 0; i < n; i++) { // Horizontale: if (Field[i][pos.Y()]!= FREE) return false; // Vertikale: if (Field[pos.X()][i]!= FREE) return false; // Diagonalen:... return true; void set(int i, coord pos) { // setze Dame 'i' an Position 'pos' Field[pos.X()][pos.Y()] = i; void remove(coord pos) { // entferne Dame von Position 'pos' Field[pos.X()][pos.Y()] = FREE; 13
14 3. Backtracking Bemerkung: Die Laufzeit des vorgestellten Algorithmus hängt davon ab, wie schnell eine gültige Lösung gefunden wird. Je nach Problemstellung kann dabei die Reihenfolge, in der die einzelnen Alternativen angeboten werden, die Laufzeit erheblich beeinflussen. Bei symmetrischen Problemen (wie im Beispiel der acht Damen) kann die Laufzeit reduziert werden, indem bei einem neuen Schritt nicht noch einmal dieselben Alternativen untersucht werden wie bei den vorhergehenden Schritten. Frage: Wie genau muss dafür das Programm von eben verändert werden? 14
15 3. Backtracking 3.3 Alle Lösungen finden Um alle Lösungen finden zu können, muss der Backtracking-Algorithmus nur geringfügig verändert werden (es wird eine vollständige Suche durchgeführt): VersucheDieNächstenSchritte( i i )) FORALL: FORALL: Wähle Wähle die die nächste nächste Alternative Alternative k k (von (von m) m) für für Schritt Schritt ii IF IF annehmbar annehmbar (i, (i, k) k) Zeichne Zeichne (i,k) (i,k) auf auf IF IF (i+1 (i+1 < n) n) // // d.h. d.h. Lösung Lösung noch noch unvollständig VersucheDieNächstenSchritte( i+1 i+1 )) ELSE ELSE Drucke Drucke Lösung Lösung Lösche Lösche die die Aufzeichnung (i,k) (i,k) Frage: Aufwand? 15
16 4. Branch-and-Bound 4.1 Vollständige Suche mit Bewertung Will man die optimale Lösung finden, muss eine Bewertungsfunktion f() bestimmen, was eine gute von einer schlechten Lösung unterscheidet, so dass unterschiedliche Lösungen einfach verglichen werden können. Damit kann die vollständige Suche von eben, wie folgt verändert werden: VersucheDieNächstenSchritte( i i )) FORALL: FORALL: Wähle Wähle die die nächste nächste Alternative Alternative k k (von (von m) m) für für Schritt Schritt ii IF IF annehmbar annehmbar (i, (i, k) k) Zeichne Zeichne (i,k) (i,k) auf auf IF IF (i+1 (i+1 < n) n) // // d.h. d.h. Lösung Lösung noch noch unvollständig VersucheDieNächstenSchritte( i+1 i+1 )) ELSE ELSE IF IF f(lösung) f(lösung) < f(minimum) f(minimum) Minimum Minimum := := Lösung Lösung Lösche Lösche die die Aufzeichnung (i,k) (i,k) 16
17 4. Branch-and-Bound Der offensichtliche Nachteil dieses Verfahrens ist, dass immer eine vollständige Suche durchgeführt wird. Außerdem passt dieses Lösungsschema nicht so richtig zu vielen Optimierungsproblemen besonders zu solchen die eine Auswahl treffen sollen, ob ein bestimmtes Element in die Lösung aufgenommen werden soll oder nicht Branch-and-Bound Schema Daher wird i.f. ein weiteres Lösungsschema vorgestellt, dass speziell für Optimierungsprobleme gedacht ist. Ein Branch-and-Bound-Algorithmus ist ein Verfahren, das insbesondere versucht, nicht den kompletten Suchraum erkunden zu müssen: Sobald klar, dass sich an einer bestimmten Stelle die Fortsetzung nicht mehr lohnt, bricht das Verfahren ab, und macht ggf. woanders weiter. 17
18 4. Branch-and-Bound Oft geht es bei Optimierungsproblemen um eine Auswahl aus n Objekten. Ein Algorithmus muss also für jedes Objekt entscheiden, ob es teil der Lösung sein kann (Einschlusskriterium) oder ob es nicht teil der Lösung sein kann (Ausschlusskriterium) VersucheDieNächstenObjekte( i i )) IF IF Einschluss Einschluss von von (i) (i) möglich möglich Zeichne Zeichne (i) (i) auf auf IF IF (( i+1 i+1 < n n ))//// d.h. d.h. Lösung Lösung noch noch unvollständig unvollständig VersucheDieNächstenObjekte( i+1 i+1 )) ELSE ELSE Prüfe Prüfe Optimalität Optimalität Lösche Lösche die die Aufzeichnung Aufzeichnung (i) (i) IF IF Ausschluss Ausschluss von von (i) (i) möglich möglich IF IF (( i+1 i+1 < n n ))//// d.h. d.h. Lösung Lösung noch noch unvollständig unvollständig VersucheDieNächstenObjekte( i+1 i+1 )) ELSE ELSE Prüfe Prüfe Optimalität Optimalität 18
19 4. Branch-and-Bound 4.3 Das Rucksack-Problem Dies wird dargestellt mit Hilfe eines algorithmischen Klassikers, dem Rucksack- Problem: Aus einer Menge von Objekten, die jeweils ein Gewicht und einen Nutzwert haben, soll eine Teilmenge ausgewählt werden, deren Gesamtgewicht eine vorgegebene Gewichtsschranke nicht überschreitet. Unter dieser Bedingung soll der Nutzwert der ausgewählten Objekte maximiert werden. Das Einschlusskriterium ist dabei, das zulässige Gesamtgewicht nicht zu überschreiten, wenn ein Objekt dazu kommt. Das Ausschlusskriterium besteht daraus zu prüfen, ob noch ein neuer Optimal-Wert zu erzielen ist, wenn ein Objekt weggelassen wird. 19
20 4. Branch-and-Bound Lösung in C++: void TryNextObjects(int i, int Weight, int ReachableValue) { if (Weight + A[i].GetWeight() <= MaxWeight ) { // Einschluss-Kriterium pack(i); // Zeichne (i) auf if ( i+1 < n ) // d.h. Lösung noch unvollständig TryNextObjects( i+1, Weight + A[i].GetWeight(), ReachableValue ); else SetMax(); // Prüfe Optimalität unpack(i); // Lösche die Aufzeichnung (i) if (ReachableValue - A[i].GetValue() > MaxValue ) { // Ausschluss-Kriterium if ( i+1 < n ) // d.h. Lösung noch unvollständig TryNextObjects( i+1, Weight, ReachableValue - A[i].GetValue() ); else SetMax(); // Prüfe Optimalität 20
21 4. Branch-and-Bound Die Daten werden wie folgt verwaltet: const int n = 10; const int MaxWeight = 110; int TotalValue; int MaxValue; item A[n]; bool Knapsack[n]; bool OptKnapsack[n]; // Anzahl Elemente // Maximales Gewicht des Rucksacks // gesamt möglicher Maximalwert // aktueller Maximalwert // Elemente // aktueller Rucksack // optimaler Rucksack void init() { // alles initialisieren int W[n] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ; int V[n] = {18, 20, 17, 19, 25, 21, 27, 23, 25, 24 ; TotalValue = 0; for (int i=0; i < n; i++) { A[i] = item(v[i], W[i]); TotalValue += V[i]; Knapsack[i] = false; OptKnapsack[i] = false; MaxValue = 0; 21
22 4. Branch-and-Bound Mit den folgenden Hilfsfunktionen ist das Programm (fast) komplett: void pack(int i) { Knapsack[i] = true; // aufzeichnen void unpack(int i) { // Aufzeichnung löschen Knapsack[i] = false; void SetMax() { int Value = 0; // Optimalität prüfen // Wert des aktuellen Rucksacks for (int i=0; i < n; i++) if (Knapsack[i]) Value += A[i].GetValue(); if (Value > MaxValue) { // neues Maximum gefunden MaxValue = Value; for (int i=0; i < n; i++) OptKnapsack[i] = Knapsack[i]; 22
23 5. Weiterführende Lösungsstrategien Manchmal ist ein Problem so veranlagt (NP-hart), dass auch mit Branch-and- Bound oder Dynamischer Programmierung keine Lösung in annehmbarer Zeit gefunden werden kann. Dann kommt nur eine Heuristik in Frage also ein Algorithmus der versucht, eine einigermaßen gute Lösung (d.h. eine Näherungslösung) in passabler Zeit zu finden. Dafür existieren folgende Lösungsansätze: Greedy (gierig) Strategien wählen immer ausgehend vom momentanen Standpunkt als nächstes die erfolgversprechendste Alternative. Ohne Backtracking ist ein solcher Ansatz i.d.r. sehr schnell (~ O(n)). Einfache Heuristiken sind problembezogene Standard-Verfahren (z.b. beim Scheduling oder bei der Verschnitt-Optimierung), die einer festen Vorschrift folgen (z.b. Shortest-Job-First) und damit ebenfalls sehr schnell fertig sind. Allgemeine Optimierer (z.b. Simulated Annealing, Genetische Algorithmen) sind Verfahren, die sich mehr Zeit nehmen und vorhandene Lösungen modifizieren und dann gegeneinander abwägen (z.b. Stundenplanung) 23
Einstieg in die Informatik mit Java
1 / 20 Einstieg in die Informatik mit Java Rekursion Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Überblick 2 Rekursion 3 Rekursive Sortieralgorithmen 4 Backtracking
MehrAlgorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 05 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute Einführung Grundlagen von Algorithmen Grundlagen
MehrAlgorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 07 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München Programm heute Einführung Grundlagen von Algorithmen
Mehr1 Einführung. 2 Grundlagen von Algorithmen. 3 Grundlagen von Datenstrukturen. 4 Grundlagen der Korrektheit von Algorithmen
Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 0 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München Einführung Grundlagen von Algorithmen Grundlagen
MehrDynamisches Programmieren - Problemstruktur
Dynamisches Programmieren - Problemstruktur Optimale Substruktur: Optimale Lösung enthält optimale Lösungen von Teilproblemen. Bsp.: Kürzester Weg im Graphen, LCS (s. etwa Folie 42 der letzten Vorlesung)
MehrDynamische Programmierung II
Vorlesungstermin 10: Dynamische Programmierung II Markus Püschel David Steurer talks2.dsteurer.org/dp2.pdf Algorithmen und Datenstrukturen, Herbstsemester 2018, ETH Zürich Plan für heute Dynamische Programmierung
MehrDas Problem des Handlungsreisenden
Seite 1 Das Problem des Handlungsreisenden Abbildung 1: Alle möglichen Rundreisen für 4 Städte Das TSP-Problem tritt in der Praxis in vielen Anwendungen als Teilproblem auf. Hierzu gehören z.b. Optimierungsprobleme
MehrTheoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme
Theoretische Informatik Exkurs Rainer Schrader Exkurs: Komplexität von n Institut für Informatik 13. Mai 2009 1 / 34 2 / 34 Gliederung Entscheidungs- und Approximationen und Gütegarantien zwei Greedy-Strategien
MehrÜbungen zum Vortrag Backtracking mit Heuristiken
Übungen zum Vortrag Backtracking mit Heuristiken A) Java-Implementierung studieren von Backtracking im Labyrinth B) Pseudocode schreiben zu Backtracking beim n Damen Problem C) Implementierung der Springerwege
MehrLösungen von Übungsblatt 12
Lösungen von Übungsblatt 12 Algorithmen (WS 2018, Ulrike von Luxburg) Lösungen zu Aufgabe 1 Eine (kanonische) Möglichkeit, die Branch-Schritte auszuführen ergibt sich wie folgt: Das ursprüngliche Problem
MehrGrundlagen der Algorithmen und Datenstrukturen Kapitel 12
Grundlagen der Algorithmen und Datenstrukturen Kapitel 12 Christian Scheideler + Helmut Seidl SS 2009 28.06.09 Kapitel 12 1 Generische Optimierungsverfahren Techniken: Systematische Suche lass nichts aus
MehrBacktracking mit Heuristiken
Backtracking mit Heuristiken Thomas Dübendorfer thomas@duebendorfer.ch 14. September 2000 Inhalt und Ablauf 1. Einführendes Beispiel (4 min) 2. Konzepte zu Backtracking (8 min) 3. Eingesperrt im Labyrinth
MehrADS: Algorithmen und Datenstrukturen 2
ADS: Algorithmen und Datenstrukturen 2 Teil XI Peter F Stadler & Konstantin Klemm Bioinformatics Group, Dept of Computer Science & Interdisciplinary Center for Bioinformatics, University of Leipzig 16
MehrII.3.1 Rekursive Algorithmen - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen -
MehrWas der Mathematiker Gauß nicht konnte, das können wir Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 1
Was der Mathematiker Gauß nicht konnte, das können wir 16.01.2003 Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 1 friend Klassenmethoden können friend-funktionen anderer Klassen werden Ganze Klassen können
MehrStack. Seniorenseminar Michael Pohlig
Stack Seniorenseminar 21.06.2013 Michael Pohlig (pohlig@kit.edu) Übersicht 1. Axiomatik eins Kellers und seine Software- Realisierung 2. Bedeutung der Rekursion in der Mathematik 3. Rekursive Programmierung.
MehrUninformierte Suche in Java Informierte Suchverfahren
Uninformierte Suche in Java Informierte Suchverfahren Stephan Schwiebert WS 2008/2009 Sprachliche Informationsverarbeitung Institut für Linguistik Universität zu Köln 8-Damen-Problem Gegeben: Schachbrett
MehrAlgorithmen und Datenstrukturen 2. Stefan Florian Palkovits, BSc Juni 2016
Algorithmen und Datenstrukturen 2 Übung 1 Stefan Florian Palkovits, BSc 0926364 e0926364@student.tuwien.ac.at 12. Juni 2016 Aufgabe 1: Es existiert eine Reduktion von Problem A auf Problem B in O(n 3 +
MehrAlgorithmen und Datenstrukturen 2 VU 3.0 Nachtragstest SS Oktober 2016
Technische Universität Wien Institut für Computergraphik und Algorithmen Algorithms and Complexity Group 186.815 Algorithmen und Datenstrukturen 2 VU 3.0 Nachtragstest SS 2016 5. Oktober 2016 Machen Sie
MehrSortierverfahren. Sortierverfahren für eindimensionale Arrays
Sortierverfahren Sortierverfahren Sortieren durch Einfügen Sortieren durch Auswählen Sortieren durch Vertauschen (Bubblesort) Quicksort Sortierverfahren für eindimensionale Arrays 1 Gegeben ist eine beliebige
MehrAlgorithmen und Datenstrukturen 1 Kapitel 3
Algorithmen und Datenstrukturen 1 Kapitel 3 Technische Fakultät robert@techfak.uni-bielefeld.de Vorlesung, U. Bielefeld, Winter 2005/2006 3.6 Dynamische Programmierung Die rekursive Problemzerlegung kann
Mehr11.1 Grundlagen - Denitionen
11 Binärbäume 11.1 Grundlagen - Denitionen Denition: Ein Baum ist eine Menge, die durch eine sog. Nachfolgerrelation strukturiert ist. In einem Baum gilt: (I) (II) 1 Knoten w ohne VATER(w), das ist die
Mehr13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems
13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems 13.1 Modellierung des Rucksackproblems 13.2 Lösung mit Greedy-Algorithmus 13.3 Lösung mit Backtracking 13.4 Lösung mit Dynamischer Programmierung
MehrÜbungen zur Vorlesung Datenstrukturen und Algorithmen SS 07 Beispiellösung Blatt 5
Kamil Swierkot Paderborn, den 01.06.2007 Aufgabe 17 Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 07 Beispiellösung Blatt 5 Bei der Optimierungsvariante des SubSetSum Problems wird bei der Eingabe
MehrAlgorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen Lerneinheit : Dynamisches Programmieren Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester.. Einleitung Diese Lerneinheit widmet sich einer
MehrStud.-Nummer: Datenstrukturen & Algorithmen Seite 1
Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1 Aufgabe 1. / 15 P Hinweise: 1) In dieser Aufgabe sollen Sie nur die Ergebnisse angeben. Diese können Sie direkt bei den Aufgaben notieren. 2) Sofern
MehrWiederholung. Divide & Conquer Strategie
Wiederholung Divide & Conquer Strategie Binäre Suche O(log n) Rekursives Suchen im linken oder rechten Teilintervall Insertion-Sort O(n 2 ) Rekursives Sortieren von a[1..n-1], a[n] Einfügen von a[n] in
MehrDatenstrukturen & Algorithmen
Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Dynamische Programmierung Einführung Ablaufkoordination von Montagebändern Längste gemeinsame Teilsequenz Optimale
MehrAlgorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen 2 Sommersemester 2007 11. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik studla@bioinf.uni-leipzig.de Das Rucksack-Problem Ein Dieb, der einen Safe
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Wintersemester 2012/13 25. Vorlesung Dynamisches Programmieren Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I Klausurvorbereitung Tipp: Schreiben Sie sich alle Fragen
MehrDer Dreyfus-Wagner Algorithmus für das Steiner Baum Problem
Der Dreyfus-Wagner Algorithmus für das Steiner Baum Problem Andreas Moser Dietmar Ebner Christian Schauer Markus Bauer 9. Dezember 2003 1 Einführung Der in der Vorlesung gezeigte Algorithmus für das Steiner
MehrAlgorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen 2 Sommersemester 2009 11. Vorlesung Uwe Quasthoff Universität Leipzig Institut für Informatik quasthoff@informatik.uni-leipzig.de Das Rucksack-Problem Ein Dieb, der einen
MehrFallstudie: Online-Statistik
Fallstudie: Online-Statistik Ziel: Klasse / Objekt, welches Daten konsumiert und zu jeder Zeit Statistiken, z.b. Mittelwert, Varianz, Median (etc.) ausgeben kann Statistics s = new Statistics(maxSize);...
MehrDatenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen
Bäume sind verallgemeinerte Listen Datenstrukturen Teil 2 Bäume Jeder Knoten kann mehrere Nachfolger haben Sie sind weiter spezielle Graphen Graphen bestehen aus Knoten und Kanten Kanten können gerichtet
Mehr21. Greedy Algorithmen. Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3
581 21. Greedy Algorithmen Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3 Aktivitäten Auswahl 582 Koordination von Aktivitäten, die gemeinsame Resource exklusiv
MehrRückblick: divide and conquer
Rückblick: divide and conquer pi = (xi,yi) } p å } ' }d(p,p) p ''=min(, ') F 0/0 p./95 weitere Algorithmentechniken Greedy-Algorithmen dynamische Programmierung Backtracking branch and bound Heuristiken
MehrEinführung in die Objektorientierte Programmierung Vorlesung 17: Dynamische Programmierung. Sebastian Küpper
Einführung in die Objektorientierte Programmierung Vorlesung 17: Dynamische Programmierung Sebastian Küpper Redundanz Rekursiver Lösungen Rekursion kann elegante Bescheibungen zur Problemlösung ergeben
MehrKlausur Algorithmentheorie
Prof. Dr. G. Schnitger Frankfurt, den 06.04.2009 Klausur Algorithmentheorie WS 2008/2009 Name: Vorname: Geburtsdatum: Studiengang: BITTE GENAU LESEN Die Klausur besteht aus 4 Aufgaben, in denen maximal
MehrKapitel 2. Weitere Beispiele Effizienter Algorithmen
Kapitel 2 Weitere Beispiele Effizienter Algorithmen Sequentielle Suche Gegeben: Array a[1..n] Suche in a nach Element x Ohne weitere Zusatzinformationen: Sequentielle Suche a[1] a[2] a[3] Laufzeit: n Schritte
MehrUninformierte Suche in Java Informierte Suchverfahren
Uninformierte Suche in Java Informierte Suchverfahren Stephan Schwiebert WS 2009/2010 Sprachliche Informationsverarbeitung Institut für Linguistik Universität zu Köln Suchprobleme bestehen aus Zuständen
Mehr7. Transitive Hülle. Kante des Graphen. Zusatz-Kante der transitiven Hülle
In Anwendungen ist es oft interessant zu wissen, ob man überhaupt von einem Knoten v zu einem Knoten w gelangen kann, ganz gleich wie lang der Weg auch ist. Gegeben sei dabei ein gerichteter Graph G =
MehrDatenstrukturen und Algorithmen D-INFK
Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik Peter Widmayer
MehrADS: Algorithmen und Datenstrukturen 2
ADS: Algorithmen und Datenstrukturen 2 Teil 9 Prof. Dr. Gerhard Heyer Institut für Informatik Abteilung Automatische Sprachverarbeitung Universität Leipzig 06. Juni 2018 [Letzte Aktualisierung: 06/07/2018,
MehrGroße Lösungsräume. Leon Schmidtchen Hallo Welt Seminar - LS Leon Schmidtchen Große Lösungsräume Hallo Welt Seminar - LS2
Große Lösungsräume Leon Schmidtchen 1.06.201 Hallo Welt Seminar - LS 2!1 Gliederung Motivation Brute Force Backtracking Pruning Leon Schmidtchen Branch & Bound 1.06.201 Hallo Welt Seminar - LS 2 Wann soll
MehrAlgorithmen und Datenstrukturen 2. Stefan Florian Palkovits, BSc Juni 2016
Algorithmen und Datenstrukturen Übung Stefan Florian Palkovits, BSc 09 e09@student.tuwien.ac.at 9. Juni 0 Aufgabe 9: Anwenden der Spanning Tree Heuristik auf symmetrisches TSP 9 8 7 8 8 7 Bilden eines
MehrLösungsvorschlag Serie 2 Rekursion
(/) Lösungsvorschlag Serie Rekursion. Algorithmen-Paradigmen Es gibt verschiedene Algorithmen-Paradigmen, also grundsätzliche Arten, wie man einen Algorithmus formulieren kann. Im funktionalen Paradigma
MehrDer Branching-Operator B
Branching 1 / 17 Der Branching-Operator B Unser Ziel: Löse das allgemeine Minimierungsproblem minimiere f (x), so dass Lösung(x). B zerlegt eine Menge von Lösungen in disjunkte Teilmengen. Die wiederholte
MehrPro Informatik 2009: Objektorientierte Programmierung Tag 18. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik
Tag 18 Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik 09.09.2009 Agenda Tag 16 Datenstrukturen Abstrakte Datentypen, ADT Folge: Stack, Queue, Liste, ADT Menge: Bäume:
MehrAlgorithmen & Datenstrukturen Midterm Test 2
Algorithmen & Datenstrukturen Midterm Test 2 Martin Avanzini Thomas Bauereiß Herbert Jordan René Thiemann
MehrAlgorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8
ETH Zürich Institut für Theoretische Informatik Prof. Dr. Angelika Steger Florian Meier, Ralph Keusch HS 2017 Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8 Lösungsvorschlag zu Aufgabe 1
MehrTECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2011 Einführung in die Informatik I Übungsblatt 5 Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz,
Mehr3.2. Divide-and-Conquer-Methoden
LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE 3.2. Divide-and-Conquer-Methoden Divide-and-Conquer-Methoden Einfache Sortieralgorithmen reduzieren die Größe des noch
Mehrpublic static void main(string[] args) {
Lösungen 55 Lösungen Aufgabe 1: Die Variable y enthält den Wert 1.0. Entsprechend den Prioritäten der beteiligten Operatoren / und = wird erst die Division und anschließend die Zuweisung durchgeführt.
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda 1. Sortierte Listen 2. Stacks & Queues 3. Teile und Herrsche Nächste Woche: Vorrechnen (first-come-first-served)
MehrEinführung in Heuristische Suche
Einführung in Heuristische Suche Beispiele 2 Überblick Intelligente Suche Rundenbasierte Spiele 3 Grundlagen Es muss ein Rätsel / Puzzle / Problem gelöst werden Wie kann ein Computer diese Aufgabe lösen?
MehrInformatik II Übung 8 Gruppe 4
Informatik II Übung 8 Gruppe 4 (Folien teils von Christian B. und Christelle G.) Lukas Burkhalter lubu@inf.ethz.ch Informatik II Übung 8 Lukas Burkhalter 24. April 2018 1 https://xkcd.com/1270/ Nachbesprechung
MehrInformatik II Übung 09
Informatik II Übung 09 Michael Baumann mbauman@student.ethz.ch n.ethz.ch/~mbauman 04.05.2015 Ablauf 1) Nachbesprechung Serie 8 2) Minimax & Alpha-Beta 3) Vorbesprechung Serie 9 2 Serie 8 3 Aufgabe 1 a,
MehrDatenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität
Datenstrukturen und Algorithmen Christian Sohler FG Algorithmen & Komplexität 1 Klausur Wichtige Hinweise: 2.7.07, Beginn 9 Uhr Bitte spätestens 8:4 Uhr vor Ort sein Sporthalle + Audimax Informationen
MehrKapitel 9: Lineare Programmierung Gliederung
Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen
MehrAlgorithmische Bioinformatik 1
Algorithmische Bioinformatik 1 Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2009 Übersicht Algorithmen
MehrQuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert
4.3.6 QuickSort QuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert QuickSort teilt das gegebene Array anhand
Mehr6.1. Ein Approximationsalgorithmus für das Rucksackproblem
6.1. Ein Approximationsalgorithmus für das Rucksackproblem Wir erinnern uns an das 0-1-Rucksackproblem: Eingabe: Ganzzahlige Volumina a 1,..., a n > 0, Nutzenwerte c 1,..., c n > 0, ganzzahlige Volumenschranke
Mehrf 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2
Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Lösung - Präsenzübung.05.0 F. Corzilius, S. Schupp, T. Ströder Aufgabe (Asymptotische Komplexität): (6 + 0 + 6 = Punkte) a) Geben Sie eine formale
MehrÜbung zu Algorithmen und Datenstrukturen (für ET/IT)
Übung zu Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2017 Rüdiger Göbl, Mai Bui Computer Aided Medical Procedures Technische Universität München Fibonacci Zahlen Fibonacci Folge Die Fibonacci
MehrAlgorithmen und Datenstrukturen 2
Algorithmen und Datenstrukturen Lerneinheit : Kürzeste Pfade in Graphen Prof. Dr. Christoph Karg Studiengang Informatik Hochschule Aalen Sommersemester 016.6.01 Einleitung Diese Lerneinheit beschäftigt
MehrMartin Unold INFORMATIK. Geoinformatik und Vermessung
Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Welche Arten von Anweisungen gibt es? Anweisungen
MehrAlgorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Suchverfahren Autor: Stefan Edelkamp / Sven Schuierer
Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Suchverfahren Autor: Stefan Edelkamp / Sven Schuierer Institut für Informatik Georges-Köhler-Allee Albert-Ludwigs-Universität Freiburg
MehrNP-vollständige Probleme
Effiziente Algorithmen Lösen NP-vollständiger Probleme 256 NP-vollständige Probleme Keine polynomiellen Algorithmen, falls P NP. Viele wichtige Probleme sind NP-vollständig. Irgendwie müssen sie gelöst
MehrKapitel 10. Komplexität von Algorithmen und Sortieralgorithmen
Kapitel 10 Komplexität von Algorithmen und Sortieralgorithmen Arrays 1 Ziele Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:
Mehr3. Übungsblatt zu Algorithmen I im SoSe 2017
Karlsruher Institut für Technologie Prof. Dr. Jörn Müller-Quade Institut für Theoretische Informatik Björn Kaidel, Sebastian Schlag, Sascha Witt 3. Übungsblatt zu Algorithmen I im SoSe 2017 http://crypto.iti.kit.edu/index.php?id=799
MehrAlgorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2018 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München Organisatorisches: Keine Vorlesung nächste Woche wegen
MehrWeitere Algorithmenentwurfstechniken
Weitere Algorithmenentwurfstechniken 1 Backtracking Vier Damen Beim Schach bedroht die Figur der Dame alle Felder, die sich horizontal, vertikal oder diagonal von der entsprechenden Position der Dame befinden.
Mehr2.2 Der Algorithmus von Knuth, Morris und Pratt
Suchen in Texten 2.1 Grundlagen Ein Alphabet ist eine endliche Menge von Symbolen. Bsp.: Σ a, b, c,..., z, Σ 0, 1, Σ A, C, G, T. Wörter über Σ sind endliche Folgen von Symbolen aus Σ. Wörter werden manchmal
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. Vorrechnen von Aufgabenblatt 1. Wohlgeformte Klammerausdrücke 3. Teile und Herrsche Agenda 1.
MehrHallo Welt für Fortgeschrittene
Hallo Welt für Fortgeschrittene Zahlentheorie, Arithmetik und Algebra II Benjamin Fischer Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Gliederung Lineare Rekursion BigInteger Chinesischer
MehrEffiziente Algorithmen 2
Effiziente Algorithmen 2 Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2009 Übersicht Algorithmen
Mehr12. Rekursion Grundlagen der Programmierung 1 (Java)
12. Rekursion Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 24. Januar 2006 Einordnung im Kontext der Vorlesung
MehrKapitel 5: Dynamisches Programmieren Gliederung
Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen
MehrInformatik II, SS 2014
Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 20 (23.7.2014) All Pairs Shortest Paths, String Matching (Textsuche) Algorithmen und Komplexität Vorlesungsevaluation Sie sollten alle eine
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Prof. Martin Lercher Institut für Informatik Heinrich-Heine-Universität Düsseldorf Algorithmen und Datenstrukturen Teil 3 Suchen in Listen Version vom: 15. November 2016
Mehr15. Algorithmus der Woche Das Rucksackproblem Die Qual der Wahl bei zu vielen Möglichkeiten
15. Algorithmus der Woche Das Rucksackproblem Die Qual der Wahl bei zu vielen Möglichkeiten Autoren Rene Beier, MPI Saarbrücken Berthold Vöcking, RWTH Aachen In zwei Monaten startet die nächste Rakete
MehrGliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen
5. Compiler Gliederung 1. Struktur eines Compilers 2. Syntaxanalyse durch rekursiven Abstieg 3. Ausnahmebehandlung 4. Arrays und Strings 6. Sortieren und Suchen 1. Grundlegende Datenstrukturen 2. Bäume
MehrElementare Sortierverfahren
Algorithmen und Datenstrukturen I Elementare Sortierverfahren Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 18.03.2018 18:16 Inhaltsverzeichnis Sortieren.......................................
MehrComputational Intelligence
Vorlesung Computational Intelligence Stefan Berlik Raum H-C 80 Tel: 027/70-267 email: berlik@informatik.uni-siegen.de Inhalt Überblick Rückblick Optimierungsprobleme Optimierungsalgorithmen Vorlesung Computational
MehrCounting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit
Counting-Sort Counting - Sort ( A,B,k ). for i to k. do C[ i]. for j to length[ A]. do C[ A[ j ] C[ A[ j ] +. > C[ i] enthält Anzahl der Elemente in 6. for i to k. do C[ i] C[ i] + C[ i ]. > C[ i] enthält
MehrDatenstrukturen und Algorithmen (SS 2013)
Datenstrukturen und Algorithmen (SS 2013) Übungsblatt 10 Abgabe: Montag, 08.07.2013, 14:00 Uhr Die Übungen sollen in Gruppen von zwei bis drei Personen bearbeitet werden. Schreiben Sie die Namen jedes
MehrVerschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
MehrAlgorithmische Geometrie: Delaunay Triangulierung (Teil 2)
Algorithmische Geometrie: Delaunay Triangulierung (Teil 2) Nico Düvelmeyer WS 2009/2010, 2.2.2010 Überblick 1 Delaunay Triangulierungen 2 Berechnung der Delaunay Triangulierung Randomisiert inkrementeller
MehrStud.-Nummer: Datenstrukturen & Algorithmen Seite 1
Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1 Aufgabe 1. / 16 P Instruktionen: 1) In dieser Aufgabe sollen Sie nur die Ergebnisse angeben. Diese können Sie direkt bei den Aufgaben notieren. 2) Sofern
MehrAnsätze zur Erfassung von Faktoren durch Prüfungsaufgaben. (Diskussionen in Dagstuhl sowie mit Prof. Nickolaus, Technikpädagogik, U Stuttgart)
Taxonomie + Schwierigkeit Ansätze zur Erfassung von Faktoren durch Prüfungsaufgaben. (Diskussionen in Dagstuhl sowie mit Prof. Nickolaus, Technikpädagogik, U Stuttgart) Beurteilen Synthese Konstruktion
MehrLernmodul 7 Algorithmus von Dijkstra
Folie 1 von 30 Lernmodul 7 Algorithmus von Dijkstra Quelle: http://www.map24.de Folie 2 von 30 Algorithmus von Dijkstra Übersicht Kürzester Weg von A nach B in einem Graphen Problemstellung: Suche einer
MehrKapitel 5: Paradigmen des Algorithmenentwurfs. Gliederung
Gliederung 1. Grundlagen 2. Analyse der Laufzeit von Algorithmen 3. Untere Schranken für algorithmische Probleme 4. Sortier- und Selektionsverfahren 5. Paradigmen des Algorithmenentwurfs 6. Ausgewählte
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. (Sortierte) Listen 2. Stacks & Queues 3. Datenstrukturen 4. Rekursion und vollständige Induktion
MehrDatenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik
5. Datenstrukturen Motivation Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik Eine Datenstruktur speichert gegebene Daten und stellt auf diesen bestimmte Operationen
MehrInterne Sortierverfahren
Angewandte Datentechnik Interne Sortierverfahren Interne Sortierverfahren Ausarbeitung einer Maturafrage aus dem Fach A n g e w a n d t e D a t e n t e c h n i k Andreas Hechenblaickner 5CDH HTBLA Kaindorf/Sulm
MehrProgrammieren 1 C Überblick
Programmieren 1 C Überblick 1. Einleitung 2. Graphische Darstellung von Algorithmen 3. Syntax und Semantik 4. Einstieg in C: Einfache Sprachkonstrukte und allgemeiner Programmaufbau 5. Skalare Standarddatentypen
Mehr