11. Rekursion, Komplexität von Algorithmen
|
|
|
- Alma Flater
- vor 9 Jahren
- Abrufe
Transkript
1 11. Rekursion, Komplexität von Algorithmen Teil 2 Java-Beispiele: Power1.java Hanoi.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 23. Nov. 2015
2 Anwendung der Rekursion Rekursiv definierte Funktionen - Fibonacci-Funktion - Fakultät, Potenz -... Rekursiver Aufbau der zu verarbeitenden Daten - Programme (EBNF)-> Compiler - Bäume und Listen (Teil III) Natürliche rekursive Problemlösungen - Sortierverfahren - Türme von Hanoi -... K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 2
3 3 Rekursiver Aufbau von Daten: Syntax von Programmiersprachen
4 4 Programmstruktur: rekursiv definiert Anweisung if ( x > 1 ) Anweisung Anweisung Anweisung x = y ; else { y = z ; z = 1 ; }
5 5 Beispiel: rekursiver Aufbau der Daten Compiler: Parser (Syntaxanalyse) Eingabedaten für Compiler/Parser? EBNF: Anweisung ::= Auswahlanweisung Block... Auswahlanweisung ::= if ( Ausdruck ) Anweisung [ else Anweisung ] Block ::= { Anweisung... } Parser: 1. testet, ob Anweisung vorliegt 2. findet if-anweisung 3. testet im Innern der if-anweisung: liegen 1 (2) innere Anweisungen vor rekursiver Aufruf des Tests, ob Anweisung anliegt
6 6 Parser : testet in jedem Zustand, ob bestimmte Syntaxeinheit anliegt 1. Ebene if ( x > 1 ) x = y ; else { y = z ; z = 1 ; } 2. Ebene Algorithmus: Test auf Anweisung Block / Verbundanweisung 3. Ebene Compiler muss rekursiv arbeiten 1. Ebene: Einstieg in den Algorithmus 2. Ebene: 1. rekursiver Aufruf (zwei mal) 3. Ebene: 2. rekursiver Aufruf (in Block, zwei mal) Einzelheiten: Compilerbau
7 Anwendung der Rekursion Rekursiv definierte Funktionen - Fibonacci-Funktion - Fakultät, Potenz -... Rekursiver Aufbau der zu verarbeitenden Daten - Programme (EBNF)-> Compiler - Bäume und Listen (Teil III) Natürliche rekursive Problemlösungen - Sortierverfahren (II.12) - Türme von Hanoi -... K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 7
8 8 Rekursive Problemlösungen: Türme von Hanoi
9 Rekursive Problemlösungen: Türme von Hanoi Aufgabe: Scheiben liegen der Größe nach geordnet auf einem Platz A und sollen auf einen Platz C unter Zuhilfenahme eines Platzes B transportiert werden. Randbedingungen: - immer nur eine Scheibe bewegen (die obere) - niemals größere über einer kleineren Scheibe A (Start) B (Hilfe) C (Ziel) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 9
10 Aufgabe (Fortsetzung) Gesucht: Folge von Einzelbewegungen, die zum Ziel führen % java Hanoi Anzahl der Scheiben: 5 Scheibenbewegungen: von A nach C von A nach B von C nach B von A nach C... A (Start) B (Hilfe) C (Ziel) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 10
11 Lösungsalgorithmus: iterativ oder rekursiv? Gesucht: Folge von Einzelbewegungen, die zum Ziel führen. d. h. Algorithmus muss für wiederholte Berechnung von Einzelschritten sorgen. Iterativer Algorithmus? Möglich - aber: nicht naheliegend Solange (noch nicht am Ziel) Berechne nächste Bewegung Rekursiver Algorithmus? Natürliche Lösung des Problems: Zerlegung des Problems in einfachere Teilprobleme, die rekursiv bearbeitet werden bewege n Scheiben bewege n-1 Scheiben K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 11
12 12 Rekursiver Lösungsalgorithmus 0 1 A (Start) B (Hilfe) C (Ziel) A (Start) B (Hilfe) C (Ziel) 2 A (Start) B (Hilfe) C (Ziel) 3 A (Start) B (Hilfe) C (Ziel)
13 13 Rekursiver Lösungsalgorithmus 0 1 A (Start) B (Hilfe) Problem: C (Ziel) Bewege n Scheiben zurückgeführt auf 3 Teilprobleme: Bewege n-1 Scheiben A (Start) B (Hilfe) C (Ziel) 2 Bewege 1 Scheibe 3 A (Start) B (Hilfe) C (Ziel) Bewege n-1 Scheiben A (Start) B (Hilfe) C (Ziel)
14 14 Rekursiver Lösungsalgorithmus Bewege n Scheiben von start über hilfe nach ziel Anfang: n = 1 (e i n e Scheibe) Transportiere die Scheibe direkt von start nach ziel Schritt: n > 1 1. Bewege n - 1 Scheiben *) von start über ziel nach hilfe 2. Transportiere eine (größte) Scheibe direkt von start nach ziel 3. Bewege n - 1 Scheiben *) von hilfe über start nach ziel *) Bewege : Kein gleichzeitiger Transport von n -1 > 1 Scheiben! Sondern: Anwendung des Algorithmus auf weniger als n Scheiben (Rekursivität)
15 15 Hanoi-Programm: rekursiver Algorithmus static void bewege (int n, char start, char hilfe, char ziel) { } if (n == 1) System.out.println(" von " + start + " nach " + ziel); else { bewege(n - 1, start, ziel, hilfe); System.out.println(" von " + start + " nach " + ziel); bewege(n - 1, hilfe, start, ziel); } Gesamtproblem 3 Teilprobleme (mit 2 rekursiven Aufrufen)
16 16 Hanoi-Programm: Rahmen public static void main (String argv[]) { int n; } System.out.print("Anzahl der Scheiben: "); n = Keyboard.readInt(); if (n > 0) {... bewege(n, A, B, C ); } else System.out.println("Zahl nicht positiv"); Plätze durch Zeichen bezeichnet
17 Hanoi-Programm: Rahmen public static void main (String argv[]) { int n; System.out.print("Anzahl der Scheiben: "); n = Keyboard.readInt(); if (n > 0) {... bewege(n, A, B, C ); } else System.out.println("Zahl nicht positiv"); } % java Hanoi % java Hanoi Anzahl der Scheiben: 5 Anzahl der Scheiben: 10 Scheibenbewegungen: Scheibenbewegungen: von A nach C von A nach C von A nach B 1023 Bewegungen. %. java Hanoi von C nach B Anzahl der Scheiben: 100 von A nach C ca. 10 Mrd.... Scheibenbewegungen:... K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 17
18 18 Hanoi-Programm: Visualisierung
19 19 Aufrufbeziehungen: Hanoi Abk.: bewege(5, A, B, C ) = b(5, A, B, C ) b(5, A, B, C ) b(4, A, C, B ) b(4, B, A, C ) b(3, A, B, C ) b(3, C, A, B ) b(2,...) b(2,...) b(1,...) b(1,...)......
20 Überführung: Rekursion Iteration Warum? Rekursion: zeit- und speicheraufwendig (Aufrufe von Methoden) Es gibt Programmiersprachen ohne Rekursion K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 20
21 21 Hanoi: rekursiv iterativ (mit Abspeicherung von zu lösenden Problemen: Stack) Grundprinzip: In einem (Zyklus-)Schritt: Löse immer das aktuelle Problem und merke die später zu lösenden Probleme in einem Problemspeicher (Stack) Ein Problem: Bewege n Scheiben von 'start' über 'hilfe' nach 'ziel' Im Problemspeicher (Stack / Stapel): das aktuelle Problem ist 'oben' gespeichert, die anderen Probleme liegen darunter Algorithmus: Wie? Solange noch Probleme zu lösen sind while (!isempty(problemstack)) { // bearbeite das aktuelle (oberste) Problem } n = 1 drucken und Problem streichen n > 1 Problem streichen + speichere drei neue Probleme
22 Beispiel: 'Problem-Stack' bewege (5, 'A', 'B', 'C'); Stackentwicklung (Speicher aller zu lösenden Probleme): Anfang: 5 A B C aktuelles Problem aktuelles Problem 1. Zyklusschritt: 4 A C B 1 A B C 4 B A C alle zu lösenden Probleme while (!isempty(problemstack)) { // bearbeite das aktuelle (oberste) Problem } n = 1 drucken und Problem streichen K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 n > 1 Problem streichen + speichere drei neue Probleme 22
23 23 Beispiel: 'Problem-Stack' bewege (5, 'A', 'B', 'C'); Anfang: 1. Zyklusschritt: 2. Zyklusschritt: Stackentwicklung: 5 A B C 4 A C B 1 A B C 4 B A C 3 A B C 1 A C B 3 C A B 1 A B C 4 B A C Weitere Zyklusschritte? 3. Zyklusschritt: 4. Zyklusschritt: 2 A C B 1 A B C 2 B A C 1 A C B 3 C A B 1 A B C 4 B A C 1 A B C 1 A C B 1 C A B 1 A B C 2 B A C 1 A C B 3 C A B 1 A B C 4 B A C
24 Beispiel: 'Problem-Stack' bewege (5, 'A', 'B', 'C'); Anfang: 1. Zyklusschritt: 2. Zyklusschritt: Stackentwicklung: 5 A B C 4 A C B 1 A B C 4 B A C 3 A B C 1 A C B 3 C A B 1 A B C 4 B A C Zyklusschritt: 4 * drucken und 4 Probleme streichen: K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 3. Zyklusschritt: 4. Zyklusschritt: 2 A C B 1 A B C 2 B A C 1 A C B 3 C A B 1 A B C 4 B A C 1 A B C 1 A C B 1 C A B 1 A B C 2 B A C 1 A C B 3 C A B 1 A B C 4 B A C 24
25 Modifizierte Aufgabe: Modifiziertes Problem: Türme von Hanoi Scheiben liegen der Größe nach geordnet auf einem Platz A und sollen auf einen Platz C unter Zuhilfenahme eines Platzes B transportiert werden. Randbedingungen: Idee? - immer nur eine Scheibe bewegen (die obere) - niemals größere über einer kleineren Scheibe - Transport nur zwischen Nachbarplätzen, d.h. verboten A C, C A Anzahl der Scheibenbewegungen? A (Start) B (Hilfe) C (Ziel) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 25
26 26 Wertung: Rekursion Alternative iterative Lösung immer möglich - weil alles in Maschinensprache ablaufen muss ohne Rekursion - Idee für iterative Lösung: natürliche rekursive Lösung Iterative Variante: oft schneller (Methodenaufrufe: zeitintensiv) Rekursive Lösung: oft lesbarer, eleganter aber zeit- und speicheraufwendig Rekursion: nicht um jeden Preis Nur wenn Lesbarkeit erhöht, anwenden auf : rekursive Funktionen rekursive Daten rekursive Problemlösungen Rekursive Lösung dort meist die einzige sinnvolle!
27 27 Komplexität von Algorithmen: Rechenaufwand Nicht: Komplexität von Programmen Unterschied? Programm: Größe/Länge des Programms Algorithmus: Laufzeit/Berechnungsaufwand
28 Komplexitätsbetrachtungen von Algorithmen Warum? Oft wichtig: - Vor Entwicklung von Programmen: Lohnt sich die Entwicklung eines Programms überhaupt: rechnet Jahre - Vor Nutzung von Programmen: Welche Eingaben verkraftet das Programm bzgl. der Laufzeit? K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 28
29 Beispiel: Welche Eingaben verkraftet das Hanoi-Programm? % java Hanoi Anzahl der Scheiben: 1000 Scheibenbewegungen: von A nach C... Wie viele Ausgaben (welche Zeit)? Scheiben Bewegungen 1 31 ~ 1 Mrd. ~ Zahl mit 100 Nullen K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 29
30 30 Dauer aller Scheibenbewegungen Bei einer Scheibe pro Sekunde Anzahl Scheiben Benötigte Zeit 5 31 Sekunden 10 17,1 Minuten Tage Jahre Jahrhunderte 60 36,6 Milliarden Jahre Milliarden Jahre Falls schneller Rechner: 1 Mia Bewegungen pro Sekunde 585 Jahre für 64 Scheiben! 1000 Scheiben?
31 31 Komplexitätsbetrachtungen: H a n o i n Anzahl Bewegungen Beweis: Vollständige Induktion ~ Allgemein: anz(n) = 2 n - 1 Anfang: anz(1) = 2-1 = 1 (gilt nach dem Algorithmus) Schritt: anz(n+1) = 2 (n+1) - 1 = 2 * 2 n - 1 = 2 * (2 n -1) + 1 = 2 * anz(n) + 1 (nach Vor.) Damit gilt: für (n+1) wird die bisher ermittelte Anzahl für n verdoppelt + 1 Gilt nach: Hanoi-Algorithmus -> siehe Beschreibung des Algorithmus
32 32 Komplexitätsbetrachtungen: H a n o i n Anzahl Bewegungen Beweis: Vollständige Induktion ~ Anfang: anz(1) = 2-1 = 1 (gilt nach dem Algorithmus) Schritt: anz(n+1) = 2 (n+1) - 1 = 2 * 2 n - 1 = 2 * (2 n -1) + 1 Allgemein: anz(n) = 2 n - 1 = 2 * anz(n) + 1 (nach Vor.) bewege(n - 1, start, ziel, hilfe); Transportiere eine Scheibe(start " nach ziel); bewege(n - 1, hilfe, start, ziel); Damit gilt: für (n+1) wird die bisher ermittelte Anzahl für n verdoppelt + 1 Gilt nach: Hanoi-Algorithmus -> siehe Beschreibung des Algorithmus
33 Teilgebiete der Informatik und ihre Beziehungen Komplexitätstheorie: Theorie des Berechnungsaufwands von Algorithmen Praktische Informatik: - Datenbanken - Software Engineering - Programmiersprachen - Compilerbau - Betriebssysteme - Systemanalyse Theoretische Informatik: (Teilbereiche:) - Algorithmentheorie - Berechnungstheorie - Codierungstheorie - formale Sprachen - Automatentheorie - Komplexitätstheorie - Logik Technische Informatik: Angewandte Informatik: K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 33
34 Komplexität von Algorithmen Zusammenhang zwischen Größe der Eingabe n Berechnungsaufwand O(n) Beispiele: Exponent n bei power n n n log 2 n (power) (power1) Multiplikationen Anzahl n der Scheiben bei Hanoi n 2 n -1 Ausgabeoperationen (Scheibenbewegungen) Anzahl n der Elemente beim Sortieren K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Anzahl: Vergleiche, Vertauschungen 34
35 Komplexitätsklassen von Algorithmen Algorithmen heißen..., falls der Zusammenhang zwischen n und dem Berechnungsaufwand O in dem angegebenen Verhältnis steht. konstant: logarithmisch: (power1) linear: (power) n log 2 n: O(n) = Konstante k O(n) = k * log 2 n O(n) = k * n O(n) = k * n log 2 n quadratisch: O(n) = k * n 2 polynomiell: O(n) = k * n m (m>1) exponentiell: (Hanoi) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 O(n) = k * 2 n genauer Wert bei Hanoi: 2 n -1 kleinere Dimension bei O(n) weggelassen es kommt auf Größenordnung an 35
36 36 Komplexitätsklassen: Zusammenhänge Größe der Eingabe: Berechnungsaufwand: Anzahl der Operationen (z.b. Multiplikationen, Scheibenbewegungen) n O (n) k k log 2 n k * n k * 2 n? power1 power Hanoi
37 Komplexitätsklassen: ausgewählte Werte n konstant logarithmisch (power1) linear (power) quadratisch exponentiell (Hanoi) ~10 Mrd. ~ (Größere Dimension entscheidet, kleinere Dimension weggelassen) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 37
38 38 Komplexitätsbetrachtungen Programmierung: Suche nach effizienten Algorithmen nicht jeder Algorithmus ist geeignet Lohnt sich die Entwicklung eines Programms überhaupt (rechnet Jahre)? Welche Eingaben verkraftet das Programm bzgl. der Laufzeit (vgl. Hanoi-Programm)?
11. Rekursion, Komplexität von Algorithmen
nwendung der Rekursion 11. Rekursion, Komplexität von lgorithmen Teil 2 Java-eispiele: Power1.java Hanoi.java Rekursiv definierte Funktionen - Fibonacci-Funktion - Fakultät, Potenz -... Rekursiver ufbau
11. Rekursion. - Wiederholung von Anweisungen: durch Iteration und Rekursion - Anwendungsfälle der Rekursion
11. Rekursion 258 K. Bothe, PI1, WS 2000/01 259 ' ( ) - Wiederholung von Anweisungen: durch Iteration und Rekursion - Anwendungsfälle der Rekursion - induktiv definierte Funktionen - rekursive Problemlösungen
Komplexität von Algorithmen
Komplexität von Algorithmen Ziel Angabe der Effizienz eines Algorithmus unabhängig von Rechner, Programmiersprache, Compiler. Page 1 Eingabegröße n n Integer, charakterisiert die Größe einer Eingabe, die
Vorkurs Informatik WiSe 17/18
Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Nicole Naczk, 10.10.2017 Technische Universität Braunschweig, IPS Überblick Einleitung Türme von Hanoi Rekursion Beispiele 10.10.2017 Dr. Werner Struckmann
Komplexität von Algorithmen
Komplexität von Algorithmen Prof. Dr. Christian Böhm WS 07/08 in Zusammenarbeit mit Gefei Zhang http://www.dbs.informatik.uni-muenchen.de/lehre/nfinfosw Ressourcenbedarf - Größenordnungen Prozesse verbrauchen
II.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 -
Abschnitt 7: Komplexität von imperativen Programmen
Abschnitt 7: Komplexität von imperativen Programmen 7. Komplexität von imperativen Programmen 7 Komplexität von imperativen Programmen Einf. Progr. (WS 08/09) 399 Ressourcenbedarf von Algorithmen Algorithmen
FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt
Inhalt 1. Einführung 1. Beispiel: Fakultät 2. Beispiel: Zahlenfolge 3. Beispiel: Formale Sprache 4. Unterschied Iteration/Rekursion 2. Rekursive Methoden 1. Beispiel: Fakultät 2. Beispiel: "Türme
Vorkurs Informatik WiSe 16/17
Java Rekursion Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 11.10.2016 Technische Universität Braunschweig, IPS Überblick Einleitung Beispiele 11.10.2016 Dr. Werner Struckmann / Stephan Mielke,
11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n!
Mathematische Rekursion 11. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration, Lindenmayer Systeme Viele mathematische Funktionen sind sehr natürlich
12. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Lernziele. Mathematische Rekursion. Rekursion in Java: Genauso! n! =
Lernziele Sie verstehen, wie eine Lösung eines rekursives Problems in Java umgesetzt werden kann. Sie wissen, wie Methoden in einem Aufrufstapel abgearbeitet werden. 12. Rekursion Mathematische Rekursion,
12. Such- und Sortierverfahren mit Arrays
12. Such- und Sortierverfahren mit Arrays Java-Beispiele: suche.java Quicksort.java merge.java Hash.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 25. Nov. 2015 2 Schwerpunkte
Datenstrukturen. Mariano Zelke. Sommersemester 2012
Datenstrukturen Mariano Zelke Sommersemester 2012 Mariano Zelke Datenstrukturen 2/19 Das Teilfolgenproblem: Algorithmus A 3 A 3 (i, j bestimmt den Wert einer maximalen Teilfolge für a i,..., a j. (1 Wenn
Kapitel 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:
5. Algorithmen. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
5. Algorithmen K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 21. Okt. 2015 1. Berechne 2 n. Zu lösende Probleme 2. Berechne die Fakultät einer nat. Zahl: n! = 1 * 2 *... n 3. Entscheide,
6. Iteration (Schleifenanweisungen)
6. Iteration (Schleifenanweisungen) Java-Beispiel: TemperatureTable.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 9. Nov. 2015 2 Schwerpunkte While-Anweisung: "abweisende"
9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion
Experiment: Die Türme von Hanoi. Rekursion Mathematische Rekursion, Terminierung, der Aufrufstapel, Beispiele, Rekursion vs. Iteration Links Mitte Rechts Mathematische Rekursion Viele mathematische Funktionen
Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)
Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Technische Universität München Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften
Rekursion. Sie wissen wie man Programme rekursiv entwickelt. Sie kennen typische Beispiele von rekursiven Algorithmen
Rekursion Sie wissen wie man Programme rekursiv entwickelt Sie kennen typische Beispiele von rekursiven Algorithmen Sie kennen die Vor-/Nachteile von rekursiven Algorithmen Einführung 2 von 40 Rekursiver
Aufrufe von Objektmethoden
Aufrufe von Objektmethoden SWE-35 Objektmethoden werden für ein bestimmtes Objekt aufgerufen; sie benutzen dessen Objektvariablen: double r = big.getradius (); Methodenaufrufe können auch die Werte von
Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen
Kapitel 9 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:
C++ - Kontrollstrukturen Teil 2
C++ - Kontrollstrukturen Teil 2 Reiner Nitsch 8417 [email protected] Schleife und Verzweigung kombiniert SV initialisieren while(b1) if(b2) w f V1 V2 SV Richtung Ziel verändern Wichtiger Baustein vieler
6. Iteration (Schleifenanweisungen)
Schwerpunkte While-: "abweisende" Schleife 6. Iteration (Schleifenanweisungen) Java-Beispiel: TemperatureTable.java Do-while-: "nichtabweisende" Schleife For-: zählergesteuerte Schleife Klassifikation
( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)
Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften Ziel: Methoden kennen
Beim rekursiven Aufruf einer Funktion wird jeweils ein Duplikat der gesamten Funktion im Speicher abgelegt.
Rekursion Unter Rekusion verstehen wir eine Funktion, die sich selbst aufruft. Da sie das nicht immerzu tun kann (das Programm würde ewig laufen) benötigt jeder rekursive Aufruf eine Abbruchbedingung!
Kasparov versus Deep Blue. Till Tantau. Institut für Theoretische Informatik Universität zu Lübeck
Kasparov versus Deep Blue Institut für Theoretische Informatik Universität zu Lübeck 18. Vorlesung zu Informatik A für MLS 14. Dezember 2006 Die Lernziele der heutigen Vorlesung und der Übungen. 1 Das
Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen
1 Kapitel 9 Komplexität von Algorithmen und Sortieralgorithmen Ziele 2 Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:
Datenstrukturen und Algorithmen
Datenstrukturen und Algorithmen VO 708.031 27.10.2011 [email protected] 1 Wiederholung Wir vergleichen Algorithmen anhand des ordnungsmäßigen Wachstums von T(n), S(n), Asymptotische Schranken: O-Notation:
Programmieren 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
Komplexität von Algorithmen:
Komplexität von Algorithmen: Ansatz: Beschreiben/erfassen der Komplexität über eine Funktion, zur Abschätzung des Rechenaufwandes abhängig von der Größe der Eingabe n Uns interessiert: (1) Wie sieht eine
Objektorientierte Programmierung VL: Prof. Dr. Marco Block-Berlitz - Freie Universität Berlin Proinformatik III
Objektorientierte Programmierung VL: Prof. Dr. Marco Block-Berlitz - Freie Universität Berlin Proinformatik III Text: Hinnerk van Bruinehsen - Grafiken: Jens Fischer powered by SDS.mint SoSe 2011 1 Teil
Prof. Dr. Margarita Esponda
Analyse von Algorithmen Die O-Notation WS 2012/2013 Prof. Dr. Margarita Esponda Freie Universität Berlin 1 Korrekte und effiziente Lösung von Problemen Problem Wesentlicher Teil der Lösung eines Problems.
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
Erste Java-Programme (Scopes und Rekursion)
Lehrstuhl Bioinformatik Konstantin Pelz Erste Java-Programme (Scopes und Rekursion) Tutorium Bioinformatik (WS 18/19) Konstantin: [email protected] Homepage: https://bioinformatik-muenchen.com/studium/propaedeutikumprogrammierung-in-der-bioinformatik/
Grundlagen der Informatik Algorithmen und Komplexität
Grundlagen der Informatik Algorithmen und Komplexität Prof. Dr. Bernhard Schiefer (basierend auf Unterlagen von Prof. Dr. Duque-Antón) [email protected] http://www.fh-kl.de/~schiefer Inhalt Einleitung
Rekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
Klassenvariablen, Klassenmethoden
Einstieg in die Informatik mit Java, Vorlesung vom 11.12.07 Übersicht 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion Klassenmethoden
Hallo 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
Speicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
Ziele. Kapitel 10: Komplexität von Algorithmen und Sortierverfahren. Beispiel: Lineare Suche eines Elements in einem Array (1)
Einführung in die Informatik: Programmierung und Softwareentwicklung Wintersemester 2018/19 Ziele Kapitel 10: Komplexität von Algorithmen und Sortierverfahren Prof. Dr. David Sabel Lehr- und Forschungseinheit
Elementare Konzepte von
Elementare Konzepte von Programmiersprachen Teil 2: Anweisungen (Statements) Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Anweisungen (statements) in Java Berechnung (expression statement)
Rekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
Schnittstellen, Stack und Queue
Schnittstellen, Stack und Queue Schnittstelle Stack Realisierungen des Stacks Anwendungen von Stacks Schnittstelle Queue Realisierungen der Queue Anwendungen von Queues Hinweise zum Üben Anmerkung: In
2. Algorithmenbegriff
2. Algorithmenbegriff Keine Algorithmen: Anleitungen, Kochrezepte, Wegbeschreibungen,... Algorithmus: Berechnungsvorschrift, die angibt, wie durch Ausführung bestimmter Elementaroperationen aus Eingabegrößen
JAVA - Rekursion
Übungen Informatik I JAVA - http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 Inhalt Allgemeines Fakultät Fibonacci Türme von Hanoi Übungen Informatik 1 Folie 2 Ein Objekt
II.1.1. Erste Schritte - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.1.1. Erste Schritte - 1 - 1.
Prof. Dr. Margarita Esponda
Die O-Notation Analyse von Algorithmen Die O-Notation Prof. Dr. Margarita Esponda Freie Universität Berlin ALP II: Margarita Esponda, 5. Vorlesung, 26.4.2012 1 Die O-Notation Analyse von Algorithmen Korrektheit
2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017
2. Algorithmische Methoden 2.1 Rekursion 18. April 2017 Rekursiver Algorithmus Ein rekursiver Algorithmus löst ein Problem, indem er eine oder mehrere kleinere Instanzen des gleichen Problems löst. Beispiel
Grundlagen der Programmierung
Grundlagen der Programmierung Algorithmen und Datenstrukturen Die Inhalte der Vorlesung wurden primär auf Basis der angegebenen Literatur erstellt. Darüber hinaus sind ausgewählte Teile in Anlehnung an
Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die
Inhalt. 7 Rekursionen Eine unendliche Geschichte Fakultät Türme von Hanoi Dr.
Inhalt 7 Rekursionen... 7-2 7.1 Eine unendliche Geschichte... 7-2 7.2 Fakultät... 7-3 7.3 Türme von Hanoi... 7-5 Propädeutikum 7-1/6 7 Rekursionen 7.1 Eine unendliche Geschichte >> Es war einmal ein Mann,
Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die
Einstieg in die Informatik mit Java
1 / 32 Einstieg in die Informatik mit Java Effizienz Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 32 1 Überblick: was ist Effizienz? 2 Landau-Symbole 3 Eier im Korb 4
2.2 Syntax, Semantik und Simulation
2.2 Syntax, Semantik und Simulation Ein Java Programm ist eine Folge von Buchstaben. Nicht jede Folge von Buchstaben ist ein korrektes Java Programm! Wie kann man alle korrekten Java Programme beschreiben?
EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12
EINI WiMa Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 11/12 Fakultät für Informatik Technische Universität Dortmund [email protected] http://ls1-www.cs.uni-dortmund.de
Lö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
II.1.1. Erste Schritte - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.1.1. Erste Schritte - 1 - 1.
n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -
n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik n "Informatik" = Kunstwort aus Information
15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen
453 15. Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen Mathematische Rekursion 454 Viele mathematische Funktionen sind sehr natürlich rekursiv
Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen
Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen
Programmieren und Problemlösen
Dennis Komm Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 27. Februar 2019 Komplexität von Algorithmen Aufgabe Primzahltest Schreibe ein Programm, das eine ganze Zahl x als Eingabe
Algorithmik Übung 2 Prof. Dr. Heiner Klocke Winter 11/
Algorithmik Übung 2 Prof. Dr. Heiner Klocke Winter 11/12 23.10.2011 Themen: Asymptotische Laufzeit von Algorithmen Experimentelle Analyse von Algorithmen Aufgabe 1 ( Asymptotische Laufzeit ) Erklären Sie,
Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn
C: Funktionen Philip Gawehn Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg Do., 22.05.2014 1 / 23 Gliederung
! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -
! 1. Rekursive Algorithmen! 2. Rekursive (dynamische) Datenstrukturen II.3.2 Rekursive Datenstrukturen - 1 - Ausdruck Ausdruck Grundwert ( Typ ) Präfix-Operator Name Methodenaufruf [ Ausdruck ] ( Ausdruck
10. Felder (Arrays) Teil 2. Java-Beispiele: Echo.java Primzahlen.java Monate.java. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16
10. Felder (Arrays) Teil 2 Java-Beispiele: Echo.java Primzahlen.java Monate.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 18. Nov. 2015 2 Techniken mit Arrays: Boolean-Anzeige-Feld
Software Entwicklung 1
Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Lernziele Rekursive Prozeduren zu charakterisieren. Terminierung von rekursiven Prozeduren mit Hilfe von geeigneten Abstiegsfunktionen
Algorithmen und Datenstrukturen Tafelübung 4. Jens Wetzl 15. November 2011
Algorithmen und Datenstrukturen Tafelübung 4 Jens Wetzl 15. November 2011 Folien Keine Garantie für Vollständigkeit und/oder Richtigkeit Keine offizielle Informationsquelle LS2-Webseite Abrufbar unter:
Abschnitt 11: Korrektheit von imperativen Programmen
Abschnitt 11: Korrektheit von imperativen Programmen 11. Korrektheit von imperativen Programmen 11.1 11.2Testen der Korrektheit in Java Peer Kröger (LMU München) in die Programmierung WS 16/17 931 / 961
12. 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
(08 - Einfache Sortierverfahren)
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (08 - Einfache Sortierverfahren) Prof. Dr. Susanne Albers Sortieren Motivation, Einführung Datenbestände müssen sehr oft sortiert werden, etwa um
Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration
Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Inhalt Rekursion: Technik Prof. Dr. Günter Rudolph Fakultät
Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet.
3.6 Rekursion Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet. Klassisches Beispiel: Berechnung von n! (Fakultät
Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem
Grundzüge der Wirtschaftsinformatik WS 2002/03 Wiederholung Java Heiko Rossnagel www.m-lehrstuhl.de accelerate.com Grundzüge der Wirtschaftsinformatik WS 2002/03 1 Programmierzyklus Problem Formulierung
Java I Vorlesung Imperatives Programmieren
Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.
Einführung in die Programmierung Wintersemester 2016/17
Einführung in die Programmierung Wintersemester 2016/17 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Einleitung Gliederung Zum Begriff Informatik Zum
