Effizienz in Haskell
|
|
|
- Alke Vogt
- vor 9 Jahren
- Abrufe
Transkript
1 Informatikseminar WS03/04 Oliver Lohmann mi Gliederung Allgemeine Definition von Effizienz Lazy Evaluation Asymptotische Analyse Parameter Akkumulation Tupling Speicherplatz kontrollieren
2 Allgemeine Definition von Effizienz Definition Effizienz "Verhältnis zwischen dem erzielten Ergebnis und den eingesetzten Mitteln " (ISO 9000:000) Nicht zu verwechseln mit der Defintion von Effektivität: "Ausmaß, in dem geplante Tätigkeiten verwirklicht und geplante Ergebnisse erreicht werden" (ISO 9000:0000) 3 Gliederung Allgemeine Definition von Effizienz Lazy Evaluation Asymptotische Analyse Parameter Akkumulation Tupling Speicherplatz kontrollieren 4
3 Lazy Evaluation Beispiel zu Auswertungsschemata I Innerste Reduktion innermost reduction square (3+4) = {definition of +} square (7) = {definition of square} 7 7 = {definition of } 49 Äußerste Reduktion outermost reduction square (3+4) = {definition of square} (3+4) (3+4) = {definition of +} 7 (3+4) = {definition of +} 7 7 = {definition of } 49 5 Lazy Evaluation Beispiel zu Auswertungsschemata II Innerste Reduktion innermost reduction fst (square 4,square ) = {definition of square} fst(4 4, square ) = {definition of } fst(16, square ) = {definition of square} fst(16, ) = {definition of } fst(16,4) = {definition of fst} 16 Äußerste Reduktion outermost reduction fst(square 4,square ) = {definition of fst} square 4 = {definition of square} 4 4 = {definition of } 16 6
4 Lazy Evaluation Äußerste-/Innerste Reduktion Äußerste Reduktion terminiert häufiger Wenn sie terminieren, liefern beide Strategien das gleiche Ergebnis Vorteil Äußerste Reduktion: Falls eine Normalform vorhanden ist, kann sie berechnet werden Äußerste Reduktion wird auch Normale Ordnung (normal order) bezeichnet Nachteil Äußerste Reduktion: Gleiche Ausdrücke in Reduktionen müssen wiederholt berechnet werden (Bsp. I) Lösung: Graphen 7 Lazy Evaluation Graphen Bäume wurden definiert als eine Menge von durch Kanten miteinander verbundenen Knoten, wobei die Kanten gerichtet von der Wurzel zu den Blättern verlaufen. Zusätzlich durfte jeder Knoten nur maximal einen Vorgängerknoten besitzen (spezielle Form der Graphen) Bei Graphen entfallen diese Einschränkungen: ein Graph besteht aus Knoten, die durch Kanten verbunden sind. Die Kanten können dabei entweder gerichtet oder ungerichtet sein. 8
5 Lazy Evaluation Graphen Entspricht: (3+4) (3+4) Äußerste Graphen Reduktion outermost graph reduction square (3+4) = {definition of square} = {definition of +} = {definition of } 49 Nur drei Reduktionsschritte! 9 Lazy Evaluation Graphen Geteilte Ausdrücke sind ebenfalls in lokalen Definitionen zu finden: roots a b c = ((-b-d)/e,(-b+d)/e) where d = sqrt (square b-4 a c) e = a Der erste Reduktionsschritt für roots
6 Lazy Evaluation Effizienz Lazy Evaluation geg.: eine Reduktionsfolge e 0 e 1 e e n Zeitbedarf für Reduktion: n+ ε, ε entspricht dem Zeitaufwand der Reduktions-Suche Es wird die Zeit vernachlässigt, die zur Suche des Ausdrucks benötigt wird der den Ansprüchen einer äußersten Reduktion genügt. Bei großen Ausdrücken ein gewichtiger Faktor. Platzbedarf für Reduktion: Größe des größten Ausdrucks (Speicherplatz wird durch Garbage Collection wiederholt genutzt) 11 Lazy Evaluation Zusammenfassung Lazy Evaluation wird in Haskell eingeführt, weil Reduktionen terminieren, wenn es eine Reduktionsfolge gibt die terminiert die Eager Evaluation genau so viele oder mehr Schritte benötigt um zu terminieren Ausdrücke werden in Haskell grundsätzlich nicht strikt ausgewertet! 1
7 Gliederung Allgemeine Definition von Effizienz Lazy Evaluation Asymptotische Analyse Parameter Akkumulation Tupling Speicherplatz kontrollieren 13 Asymptotische Analyse Komplexität Zeitkomplexität (time complexity) Wie viel Laufzeit benötigt ein Programm? Raumkomplexität (space complexity) Wie viel Speicherplatz benötigt ein Programm? Die Komplexität eines Algorithmus oder einer Funktion bezeichnet die Wachstumsrate von Resourcen wie zum Beispiel der Laufzeit gegenüber der Menge der zu verabeitenden Daten. 14
8 Asymptotische Analyse Ordnung (order notation) Mathematisches Verfahren zur Einordnung von Funktionen: geg.: zwei Funktionen f, g eine positive Konstante C eine natürliche Zahl n 0 Hinweis: Funktionsresultate nur für große n aussagekräftig. 1. O-Notation (big O-notation) f hat höchstens den Grad g: f = O(g), wenn gilt: f(n) C g(n) für alle n n 0 15 Asymptotische Analyse Ordnung (order notation). Ω-Notation (big Omega-notation) n 0 f hat mindestens den Grad g: f = Ω(g), wenn gilt: f(n) C g(n) für alle n Führt man beide Regeln zusammen, erhält man ein drittes Kriterium: 3. Θ-Notation (big Theta-notation) f hat exakt den Grad g: 16
9 Asymptotische Analyse Anmerkungen order-notation = nicht im herkömmlichen Sinne, eher ist enthalten in O, Ω, Θ definieren Mengen. Diese Mengen enthalten alle Funktionen für die eine Konstante C existiert und die die Ungleichung für O, Ω oder Θ erfüllen. Häufig anzutreffen: O(1) = Ω (1) = Θ(1), konstantes Wachstum (Array-Zugriff) O(lg n ), logarithmisches Wachstum (binäres Suchen) O(n), lineares Wachstum (Zugriff auf alle Elemente einer Liste) O(n log n ), n-faches logarithmisches Wachstum (heap-sort) O(n k ), polynomisches Wachstum (quadratisch, selection-sort) O( n ), exponentielles Wachstum 17 Asymptotische Analyse Hinweise O( n) beschreibt das Verhalten einer anonymen Funktion O( n) + O( n) = O( n), da f1( n) + f( n) = O( n) f Ein Ausdruck wie O(1 ) + O( N n= 1 ) O( N O( n ) ) bedeutet nicht : Statt dessen referenziert O( n die den Anprüchen N n= 1 f ( n) N n= 1 O( n f ( n) = O( n ) = O( N 3 ) ) eine einzelne Funktion ) genügt. f, 18
10 Asymptotische Analyse Beispielrechnung geg.: eine Liste eine Funktion append, fügt Elemente hinten an die Liste an Berechnung: Ein Element anhängen: O(n), Liste mit n-elementen traversieren n Elemente anhängen: n-1 + n, entspricht: n i= 1 i n n + 1) = = ( n + n = O( n ) 19 Asymptotische Analyse Zeitkomplexität Notation: T(f)(n) Drei wichtige Hinweise: 1. Auf die Notation der Speicherplatzkomplexität wird erst im weiteren Verlauf genauer eingegangen, hier noch nicht formal korrekt.. T(f)(n) ist stets eine worst-case Einschätzung. 3. Die Eager Evaluation wird als Auswertungsgrundlage genutzt. 0
11 Asymptotische Analyse Warum Eager Evaluation? Unter Eager Evaluation kann die Laufzeitanalyse kompositionell betrachtet werden Es gilt weiterhin: theoretische obere Grenzen für Eager & Lazy Evaluation identisch häufig: untere Grenzen für Eager & Lazy Evaluation ebenfalls identisch 1 Asymptotische Analyse Beispiel reverse reverse1 [] = [] reverse1 (x : xs) = reverse1 xs ++ [x] reverse = foldl prefix [] where prefix xs x = x : xs Zur Erinnerung: (++) :: [α] [α] [α] [] ++ ys = ys (x:xs) ++ ys = x : (xs ++ ys)
12 Asymptotische Analyse Analyse reverse1 T(reverse1)(0) T(reverse1)(n+1) = O(1) = Θ(1) = T(reverse1)(n) + T(++)(n,1) Aussage. Gleichung: Um eine Liste der Länge n+1 umzudrehen, dreht man eine Liste der Länge n um und konkateniert es mit einer Liste der Länge 1. Rekursion für T(reverse1) lösen und Einsatz der Gleichung: T(++)(n,m) = Θ(n) T ( reverse1)( n) = n i= 0 Θ( n) = Θ( n ) 3 Asymptotische Analyse Analyse reverse Vorbereitende Maßnahme: foldl eliminieren, um direkte Rekursion zu erhalten reverse = foldl prefix [] where prefix xs x = x : xs umformen, Hilfsfunktion definieren: reverse xs accum ws[] accum ws (x:xs) = accum [] xs = ws = accum (x:ws) xs 4
13 Asymptotische Analyse Analyse reverse accum nimmt zwei Argumente auf Länge der Argumente: m, n T(accum)(m,0) T(accum)(m,n+1) = O(1) = Θ(1) = O(1) + T(accum)(m,n) T(reverse) = Θ(n) 5 Gliederung Allgemeine Definition von Effizienz Lazy Evaluation Asymptotische Analyse Parameter Akkumulation Tupling Speicherplatz kontrollieren 6
14 Parameter Akkumulation Idee Durch Hinzufügen eines weiteren Parameters Laufzeit verbessern Häufig genutzte Technik um teure ++-Operationen zu vermeiden 7 Parameter Akkumulation Beispiel flatten Bekannt: flatten :: Btree a [a] [a] flatten (Leaf x) = [x] flatten (Fork xt yt)= flatten xt ++ flatten yt Neue Definition: flatcat :: Btree a [a] [a] flatcat xt xs = flatten xt ++ xs Es gilt: flatten xt = flatcat xt []! Rekursive Struktur für flatcat: flatcat flatcat (Leaf x) xs flatcat (Fork xt yt) xs :: Btree a [a] [a] = x : xs = flatcat xt (flatcat yt xs) 8
15 Parameter Akkumulation Laufzeitanalyse zum Glätten eines perfekten binären Baums flatten T(flatten)(0) = O(1) T(flatten)(h+1) = T(flatten)(h) + T(++)( h, h ) Aus Induktion folgt: T(flatten)(h) = Θ(h h ) flatten benötigt also O(s log s) Schritte auf einem Baum der Größe s. flatcat T(flatcat)(0,n) = O(1) T(flatten)(h+1,n) = O(1) + T(flatcat)(h, h +n) + T(flatcat)(h,n) Aus Induktion folgt: T(flatcat)(h,n) = Θ( h ) flatcat benötigt also lineare Laufzeit im Verhältnis zur Baumgröße. 9 Gliederung Allgemeine Definition von Effizienz Lazy Evaluation Asymptotische Analyse Parameter Akkumulation Tupling Speicherplatz kontrollieren 30
16 Tupling Idee Ein weiteres Ergebnis in Funktionen mitführen Umsetzung über Ergebnistupel, z.b.: statt: fib :: Integer Integer besser: fibtwo :: Integer (Integer,Integer) 31 Tupling Beispiel fib Bekannt: fib 0 = 0 fib 1 = 1 fib (n+) = fib n + fib(n+1) Laufzeitanalyse für fib T(fib)(0) = O(1) T(fib)(1) = O(1) T(fib)(n+) = T(fib)(n) + T(fib)(n+1) + O(1) Aus Induktion folgt: T(fib)(n) = Θ(fib n), benötigte Zeit ist also proportional zur Größe des Ergebnisses. fib n = Θ(Φ n ), mit Φ = (1+sqrt(5))/ (Goldener Schnitt) exakt : fib( n) = n = 1 5 Φ n 3
17 Tupling Beispiel fib fibtwo n = (fib n, fib(n+1)) Direkte Rekursion: fibtwo 0 = (0,1) fibtwo (n+1) = (b,a+b) where (a,b) = fibtwo n T(fib) = Θ(n), lineare Laufzeit Steigerung der Effizienz von exponentiell zu linear! 33 Tupling Beispiel average -- berechnet den Durchschnitt einer Float-Liste average :: [Float] Float average xs = (sum xs) / (length xs) Zwei Traversierungen nötig -- berechnet Summe und Länge einer (Float-)Liste sumlen xs = (sum xs, length xs) Direkte Rekursion: sumlen [x] sumlen (x:y:xs) = (x,1) = (x+z,n+1) where (z,n) = sumlen(y:xs) -- berechnet den Durchschnitt einer Float-Liste average = uncurry(/). sumlen Eine Traversierung nötig 34
18 Tupling Anmerkungen zu average Beide Funktionen haben eine Laufzeit Θ(n) Der Zeitgewinn durch die einmalige Traversierung, könnte durch die Bildung von Ergebnistupeln wieder verloren gehen Warum also average??? Speicherplatz sparen! 35 Tupling Speicherplatz einsparen mit average average [ ] da average xs zweimal auf der rechten Seite xs referenziert, wird der doppelte Speicherplatz benötigt Mit der zweiten Definition von average erreichen wir eine konstante Belegung des Speichers 36
19 Gliederung Allgemeine Definition von Effizienz Lazy Evaluation Asymptotische Analyse Parameter Akkumulation Tupling Speicherplatz kontrollieren 37 Speicherplatz kontrollieren Reduktionen & Speicherplatz Reduktionsfolge sum [ ] mit sum = foldl (+) 0 sum [ ] = foldl (+) 0 [ ] = foldl (+) (0+1) [..1000] = foldl (+) ((0+1)+) [ ] : : = foldl (+) ( ((0+1)+) )[] = ( ((0+1)+) ) = Die Berechnung von sum [1..n] mit outermost reduction wächst proportional zur Größe von n 38
20 Speicherplatz kontrollieren Neue Reduktionsstrategie sum [ ] = foldl (+) 0 [ ] = foldl (+) (0+1) [..1000] = foldl (+) 1 [..1000] = foldl (+) (1+) [ ] = foldl (+) 3 [ ] : : = foldl (+) [] = Mischung aus innermost & outermost reduction Neue Funktion Definieren, die Kontrolle über Reduktion erlaubt 39 Speicherplatz kontrollieren strict Funktion strict f x = if x = then else f x Kontrolliert die Reduktionsfolge ein Term strict f e, reduziert e auf Kopf Normal-Form (λ- Ausdruck) Jeder Ausdruck in Normal Form ist auch in Kopf Normal-Form, aber nicht umgekehrt (Normal Form kann nicht mehr reduziert werden) 40
21 Speicherplatz kontrollieren Idee: foldl als strict definieren -- keine HUGS kompatible Notation sfoldl ( ) a [] = a Sfoldl ( ) a (x:xs)= strict (sfoldl ( )) (a x) xs Mit sum = sfoldl(+) 0, entsteht eine neue Reduktionsfolge: sum[ ] = sfoldl (+) 0 [ ] = strict (sfoldl(+))(0+1) [..1000] = sfoldl (+) 1 [..1000] = strict (sfoldl(+))(1+) [ ] = sfoldl (+) 3 [ ] : : = sfoldl (+) [] = Speicherplatz kontrollieren Verbindung mit average herstellen average = uncurry (/). Sumlen sumlen = sfoldl f (0,0) where f (s,n) x = (s+x, n+1) Erhalten Es entsteht wir folgende ein Programm Reduktionsfolge: mit konstanter Speicherplatznutzung? sumlen [ ] = sfoldl f (0,0) [ ] = strict (sfoldl f) (0+1,0+1) [..1000] Nein, = sfoldl da die f (0+1,0+1) Hilfsfunktion [..1000] f nicht strikt ist. = strict (sfoldl f) ((0+1)+,(0+1)+1) [ ] = 4
22 Speicherplatz kontrollieren Lösung average Problem f muss ebenfalls strikt definiert sein f (s,n) x = strict (strict tuple (s+x))(n+1) where tuple a b = (a,b) Mit f, entsteht die Reduktionsfolge: sum[ ] = sfoldl f (0,0) [ ] = strict (sfoldl f ) (strict(strict tuple(0+1))(0+1)) [..1000] = strict (sfoldl f ) (strict(strict tuple(0+1))1) [..1000] = strict (sfoldl f ) (strict(strict tuple 1)1) [..1000] = strict (sfoldl f ) (1,1) [..1000] = sfoldl f (1,1) [..1000] 43 Speicherplatz kontrollieren Anmerkungen zu fold wenn ( ) assoziativ zu der Identität e ist, dann gilt: foldr ( ) e xs = foldl ( ) e xs, für alle endlichen Listen xs Es bestehen Unterschiede in der Komplexität! Daumenregel : Wenn ( ) nicht strikt ist, dann ist foldr häufig effizienter! Beispiele: and und
23 Ende. 45
Algorithmen und Datenstrukturen 1 Kapitel 5
Algorithmen und Datenstrukturen 1 Kapitel 5 Technische Fakultät [email protected] Vorlesung, U. Bielefeld, Winter 2005/2006 Kapitel 5: Effizienz von Algorithmen 5.1 Vorüberlegungen Nicht
4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als
Kapitel 4 Bäume 4.1 Bäume, Datenstrukturen und Algorithmen Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als eine Menge von Knoten und eine Menge von zugehörigen
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.
Übung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2016 Patrick Schäfer, Humboldt-Universität zu Berlin Organisation Vorlesung: Montag 11 13 Uhr Marius Kloft RUD 26, 0 115 Mittwoch 11 13 Uhr Marius Kloft
Komplexität von Algorithmen OOPM, Ralf Lämmel
Ganz schön komplex! Komplexität von Algorithmen OOPM, Ralf Lämmel 885 Motivierendes Beispiel Algorithmus Eingabe: ein Zahlen-Feld a der Länge n Ausgabe: Durchschnitt Fragen: sum = 0; i = 0; while (i
HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül
HASKELL KAPITEL 2.1 Notationen: Currying und das Lambda-Kalkül Bisheriges (Ende VL-Teil 1) weite :: (Float,Float) ->Float weite (v0, phi) = (square(v0)/9.81) * sin(2 * phi) (10, 30 ) smaller ::(Integer,
Algorithmen und Datenstrukturen Effizienz und Funktionenklassen
Algorithmen und Datenstrukturen Effizienz und Funktionenklassen Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Lernziele der Vorlesung Algorithmen Sortieren,
A6.1 Logarithmus. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. A6.1 Logarithmus. A6.2 Landau-Notation. A6.
Algorithmen und Datenstrukturen 8. März 2018 A6. Laufzeitanalyse: Logarithmus and Landau-Symbole Algorithmen und Datenstrukturen A6. Laufzeitanalyse: Logarithmus and Landau-Symbole Marcel Lüthi and Gabriele
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
Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp
Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.
Vortrag: Bäume in Haskell Bäume in Haskell Vortrag Christoph Forster Thomas Kresalek Fachhochschule Wedel University of Applied Sciences 27. November 2009 Christoph Forster, Thomas Kresalek 1/53 Vortrag
( )= 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
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
Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS 2013. Prof. Dr. Margarita Esponda. Prof. Dr.
ALP I Funktionen höherer Ordnung Teil 2 SS 2013 Funktionen höherer Ordnung Nehmen wir an, wir möchten alle Zahlen innerhalb einer Liste miteinander addieren addall:: (Num a) => [a -> a addall [ = 0 addall
Übung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. Die Landau-Notation (Wiederholung und Vertiefung) 2. Vorbereitung Aufgabenblatt 1, Aufgabe 1
Funktionale Programmierung ALP I. Die Natur rekursiver Funktionen SS Prof. Dr. Margarita Esponda. Prof. Dr.
ALP I Die Natur rekursiver Funktionen SS 2011 Die Natur rekursiver Funktionen Rekursive Funktionen haben oft folgende allgemeine Form: f :: a -> a f 0 = c f (n+1) = h (f n ) Diese Art der Definitionen
V. Claus, Juli 2005 Einführung in die Informatik II 45
Um die Größenordnung einer reellwertigen oder ganzzahligen Funktion zu beschreiben, verwenden wir die so genannten Landau-Symbole (nach dem deutschen Mathematiker Edmund Landau, 1877-1938). Hierbei werden
3.3 Laufzeit von Programmen
3.3 Laufzeit von Programmen Die Laufzeit eines Programmes T(n) messen wir als die Zahl der Befehle, die für die Eingabe n abgearbeitet werden Betrachten wir unser Programm zur Berechnung von Zweierpotenzen,
Komplexität eines Algorithmus, Grössenordnung, Landau-Symbole, Beispiel einer Komplexitätsberechnung (Mergesort) 7. KOMPLEXITÄT
Komplexität eines Algorithmus, Grössenordnung, Landau-Symbole, Beispiel einer Komplexitätsberechnung (Mergesort) 7. KOMPLEXITÄT Komplexität eines Algorithmus Algorithmen verbrauchen Ressourcen Rechenzeit
Grundlagen der Programmierung 2. Bäume
Grundlagen der Programmierung 2 Bäume Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 24. Mai 2006 Graphen Graph: Menge von Knoten undzugehörige (gerichtete oder ungerichtete)
WS 2009/10. Diskrete Strukturen
WS 2009/10 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0910
WS 2011/2012. Robert Giegerich Dezember 2013
WS 2011/2012 Robert 1 AG Praktische Informatik 11. Dezember 2013 1 [email protected] Vorschau Themen heute: Funktionen höherer Ordnung (Fortsetzung) künstliche Striktheit mehr zu fold für
Algorithmus Analyse. Johann Basnakowski
Algorithmus Analyse Johann Basnakowski Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg Gliederung Algorithmus
HASKELL KAPITEL 8. Bäume
HASKELL KAPITEL 8 Bäume Baum rekursiv definierte Datenstruktur nicht linear vielerlei Varianten: Struktur der Verzweigung, Ort der gespeicherten Information (Knoten, Kanten, Blätter ) 2 Binärbaum Jeder
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:
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:
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
ALP I Induktion und Rekursion
ALP I Induktion und Rekursion WS 2012/2013 Vollständige Induktion (Mafi I) Die Vollständige Induktion ist eine mathematische Beweistechnik, die auf die Menge der natürlichen Zahlen spezialisiert ist. Vorgehensweise:
Algorithmenbegriff: Berechenbarkeit. Algorithmenanalyse. (Berechnung der Komplexität)
Über-/Rückblick Algorithmenbegriff: Berechenbarkeit Turing-Maschine RAM µ-rekursive Funktionen Zeit Platz Komplexität Algorithmentechniken Algorithmenanalyse (Berechnung der Komplexität) Rekursion Iteration
ALP I. Funktionale Programmierung
ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung
2. Effizienz von Algorithmen
Effizienz von Algorithmen 2. Effizienz von Algorithmen Effizienz von Algorithmen, Random Access Machine Modell, Funktionenwachstum, Asymptotik [Cormen et al, Kap. 2.2,3,4.2-4.4 Ottman/Widmayer, Kap. 1.1]
2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.
2. Grundlagen Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten. Laufzeitverhalten beschreiben durch O-Notation. 1 Beispiel Minimum-Suche Eingabe bei Minimum
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:
Informatik-Seminar Thema 6: Bäume
Informatik-Seminar 2003 - Thema 6: Bäume Robin Brandt 14. November 2003 1 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume Übersicht Definition Eigenschaften Operationen Idee Beispiel Datendefinition
Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung
Kapitel 6 Komplexität von Algorithmen 1 6.1 Beurteilung von Algorithmen I.d.R. existieren viele Algorithmen, um dieselbe Funktion zu realisieren. Welche Algorithmen sind die besseren? Betrachtung nicht-funktionaler
Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 3, Donnerstag 6.
Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 3, Donnerstag 6. November 2014 (O-Notation, Theta, Omega) Junior-Prof. Dr. Olaf Ronneberger
ProInformatik: Funktionale Programmierung. Punkte
ProInformatik: Funktionale Programmierung 27.7-22.8.2008, M. Knobelsdorf Probeklausur Ihre persönliche Klausurnummer: Vorname, Nachname: Aufgabe 1 2 3 4 5 6 7 8 Punkte 12 4 4 4 4 2 4 6 40 Erz. Punkte Zum
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
Ü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.
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
Ordnungsrelationen auf Mengen
Ordnungsrelationen auf Mengen Eine (partielle) Ordnungsrelation oder kurz Ordnung O auf einer Menge M ist eine Relation, die reflexiv, antisymmetrisch und transitiv ist. Beispiel: M = { 1, 2, 3 }, O =
Komplexität. G. Zachmann Clausthal University, Germany Leistungsverhalten von Algorithmen
lausthal Informatik II Komplexität von Algorithmen. Zachmann lausthal University, ermany [email protected] Leistungsverhalten von Algorithmen Speicherplatzkomplexität: Wird primärer & sekundärer
Programmieren in Haskell Programmiermethodik
Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs
Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 10 (Kapitel 11)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 10 (Kapitel 11) Hinweis: Dieses Übungsblatt enthält
VL-04: Rekursionsgleichungen. (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger
VL-04: Rekursionsgleichungen (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger SS 2017, RWTH DSAL/SS 2017 VL-04: Rekursionsgleichungen 1/37 Organisatorisches Vorlesung: Gerhard Woeginger (Zimmer
Übung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2016 Marc Bux, Humboldt-Universität zu Berlin Organisation Vorlesung: Montag 11 13 Uhr Marius Kloft RUD 26, 0 115 Mittwoch 11 13 Uhr Marius Kloft RUD
AlgoDat Fragen zu Vorlesung und Klausur
AlgoDat Fragen zu Vorlesung und Klausur Hochschule Fulda FB AI Sommersemester 2018 http://ad.rz.hs-fulda.de Peter Klingebiel, HS Fulda, AI Vorab: Was ist wichtig? AlgoDat - Fragen - Peter Klingebiel -
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
Einführung in die funktionale Programmierung
Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung
Algorithmen und Datenstrukturen
Universität Innsbruck Institut für Informatik Zweite Prüfung 16. Oktober 2008 Algorithmen und Datenstrukturen Name: Matrikelnr: Die Prüfung besteht aus 8 Aufgaben. Die verfügbaren Punkte für jede Aufgabe
Grundlagen der Programmierung 2 (1.B)
Grundlagen der Programmierung 2 (1.B) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 27. April 2012 Beispiel: Aufrufhierarchie quadrat x = x*x quadratsumme x y = (quadrat
Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell
Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr. Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Milners
Sortieren II / HeapSort Heaps
Organisatorisches VL-07: Sortieren II: HeapSort (Datenstrukturen und Algorithmen, SS 2017) Vorlesung: Gerhard Woeginger (Zimmer 4024 im E1) Email: [email protected] Webseite: http://algo.rwth-aachen.de/lehre/ss17/dsa.php
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
Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.
Universität Bielefeld AG Praktische Informatik 10. Dezember 2014 Wiederholung: Schema: f :: [σ] -> τ f [] = e 1 f (a : as) = e 2 where s = f as wobei e 1 und e 2 Ausdrücke vom Typ τ sind und e 2 die Variablen
Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):
Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel
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
Übung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Organisatorisches Vorlesung: Montag 11 13 Uhr Ulf Leser RUD 26, 0 115 Mittwoch 11 13 Uhr Ulf Leser RUD
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 Wachstumsverhalten von Funktionen
Algorithmen und Datenstrukturen 40 2 Wachstumsverhalten von Funktionen Beim Vergleich der Worst-Case-Laufzeiten von Algorithmen in Abhängigkeit von der Größe n der Eingabedaten ist oft nur deren Verhalten
Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Rekursion
Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005 Rekursion Rekursion Neue Denkweise Wikipedia: Als Rekursion bezeichnet man den Aufruf
Klausur Programmierung WS 2002/03
Klausur Programmierung WS 2002/03 Prof. Dr. Gert Smolka, Dipl. Inf. Thorsten Brunklaus 14. Dezember 2002 Leo Schlau 45 Vor- und Nachname Sitz-Nr. 4711 007 Matrikelnummer Code Bitte öffnen Sie das Klausurheft
Algorithmen und Datenstrukturen I Grundlagen
Algorithmen und Datenstrukturen I Grundlagen Prof. Dr. Oliver Braun Letzte Änderung: 01.11.2017 14:15 Algorithmen und Datenstrukturen I, Grundlagen 1/24 Algorithmus es gibt keine präzise Definition Handlungsvorschrift
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur - Punkte: A1: 30, A2: 20, A3: 20, A4: 20, A5: 10, A6: 20 Punkte: /120 12.02.2012 Hinweis: Geben Sie bei allen
Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016)
Kostenmodell Daniel Graf, Tobias Pröger 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016) Erklärung: Diese Mitschrift ist als Ergänzung zur Vorlesung gedacht. Wir erheben keinen Anspruch
f 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
1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit ** i=1
Universität Karlsruhe Algorithmentechnik Fakultät für Informatik WS 05/06 ITI Wagner. Musterlösung Problem : Average-case-Laufzeit vs. Worst-case-Laufzeit ** (a) Im schlimmsten Fall werden für jedes Element
Einführung in Haskell
Einführung in Haskell Axel Stronzik 21. April 2008 1 / 43 Inhaltsverzeichnis 1 Allgemeines 2 / 43 Inhaltsverzeichnis 1 Allgemeines 2 Funktions- und Typdefinitionen 2 / 43 Inhaltsverzeichnis 1 Allgemeines
8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.
8. A & D - Heapsort Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können. Genauer werden wir immer wieder benötigte Operationen durch Datenstrukturen unterstützen.
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
Lösung Probeklausur Informatik I
Lösung Probeklausur Informatik I 1 Lösung Aufgabe 1 (5 Punkte) Algorithmen und Programme Was ist der Unterschied zwischen einem Algorithmus und einem Programm? Ein Algorithmus ist eine Vorschrift zur Durchführung
Datenstrukturen & Algorithmen
Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Binäre Suchbäume Einführung und Begriffe Binäre Suchbäume 2 Binäre Suchbäume Datenstruktur für dynamische Mengen
Datenstrukturen 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
Einführung in die Informatik I
Einführung in die Informatik I Berechenbarkeit und Komplexität Prof. Dr. Nikolaus Wulff Berechenbarkeit Im Rahmen der Turingmaschine fiel zum ersten Mal der Begriff Berechenbarkeit. Ein Funktion f heißt
Klausur Algorithmen und Datenstrukturen
Technische Universität Braunschweig Sommersemester 2018 Institut für Betriebssysteme und Rechnerverbund Abteilung Algorithmik Prof. Dr. Sándor P. Fekete Christian Rieck Arne Schmidt Klausur Algorithmen
14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften
Heapsort, Quicksort, Mergesort 14. Sortieren II 14.1 Heapsort [Ottman/Widmayer, Kap. 2.3, Cormen et al, Kap. 6] 397 398 Heapsort [Max-]Heap 7 Inspiration von Selectsort: Schnelles Einfügen Binärer Baum
Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]
Heapsort / 1 Heap: Ein Array heißt Heap, falls A [i] A [2i] und A[i] A [2i + 1] (für 2i n bzw. 2i + 1 n) gilt. Beispiel: A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] Heapsort / 2 Darstellung eines Heaps als
Effiziente Algorithmen I
9. Präsenzaufgabenblatt, WiSe 2013/14 Übungstunden am 13.01. & 15.01.2014 Aufgabe Q Gegeben sei ein Fluss-Netzwerk mit Digraph D = (V, A), Knotenkapazitäten c(u, v) 0, Quelle s und Senke t. Kann sich der
Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Überladung und Konversion in Haskell. Typisierung in Haskell
Haskell, Typen, und Typberechnung Grundlagen der Programmierung 3 A Typen, Typberechnung und Typcheck Prof. Dr Manfred Schmidt-Schauß Ziele: Haskells Typisierung Typisierungs-Regeln Typ-Berechnung Sommersemester
