Programmierkurs Python II

Ähnliche Dokumente
368 4 Algorithmen und Datenstrukturen

Programmierkurs Python I

Graphen und Bäume. A.1 Graphen

Verkettete Datenstrukturen: Bäume

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

Algorithmen und Datenstrukturen Suchbaum

11.1 Grundlagen - Denitionen

9. Übung Algorithmen I

Vorlesung Datenstrukturen

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Datenstrukturen & Algorithmen

Programmierkurs Python II

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

Datenstrukturen. einfach verkettete Liste

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (20 Graphen) T. Lauer

Programmierkurs Python I

Informatik II, SS 2014

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten kürzer. kopf Eine Datenstruktur mit Schlüsselwerten 1 bis 10

Proseminar Kodierverfahren bei Dr. Ulrich Tamm Sommersemester 2003 Thema: Codierung von Bäumen (Prüfer Codes...)

Binary Decision Diagrams (Einführung)

Algorithmen und Datenstrukturen SS09

Programmierkurs Python

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

1 topologisches Sortieren

Bäume Jiri Spale, Algorithmen und Datenstrukturen - Bäume 1

Minimal spannende Bäume

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Definition Ein gerichteter Graph G = (V, E) ist ein Graph von geordneten Paaren (u, v) mit u V und v V.

13. Binäre Suchbäume

8. Übung zu Algorithmen I 15. Juni 2016

Programmierkurs Python

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

Binäre Bäume Darstellung und Traversierung

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Programmieren in Python

Mathematische Grundlagen der Computerlinguistik Bäume

Python-Workshop. Python für C/C++ Programmierer. Carl Friedrich Bolz. Carl Friedrich Bolz

6 Baumstrukturen. Formale Grundlagen der Informatik I Herbstsemester Robert Marti

Vorlesung : Binäre Entscheidungsdiagramme (BDDs) Dr. Carsten Sinz

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Binärbäume. Prof. Dr. E. Ehses,

Interaktive Visualisierung der Projektmanagement-Prozesse

Grundlagen der Programmierung 2. Bäume

Klausur Informatik B April Teil I: Informatik 3

Compiler. Kapitel. Syntaktische Analyse. Kapitel 4. Folie: 1. Syntaktische Analyse. Autor: Aho et al.

Teil XII. Datenstrukturen: Bäume, Stacks und Queues. Scientific Computing in Computer Science, Technische Universität München

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einführung in (Binäre) Bäume

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

WS 2009/10. Diskrete Strukturen

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Rekurrenzen T(n) = T(n 1) + N beschreibt Laufzeitverhalten eines rekursiven Algorithmus

Bäume und Wälder. Bäume und Wälder 1 / 37

Verteilen von Bällen auf Urnen

Kap. 4.2: Binäre Suchbäume

14. Rot-Schwarz-Bäume

Allgemeine Informatik 2 im SS 2007 Programmierprojekt

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Breiten- und Tiefensuche in Graphen

II.3.1 Rekursive Algorithmen - 1 -

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Informatik II. PVK Part1 Severin Wischmann n.ethz.ch/~wiseveri

Objektorientierte Programmierung

Algorithmen und Datenstrukturen

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

2.0. Jens Weller Joel de Guzman Hartmut Kaiser

Aufgabentypen die in der Klausur vorkommen

Beispiel 19. December 4, 2009

Einführung in die Informatik 1

Formale Methoden 1. Gerhard Jäger 12. Dezember Uni Bielefeld, WS 2007/2008 1/22

Datenstrukturen und Algorithmen

10 Graphenalgorithmen in Java

4 Greedy-Algorithmen (gierige Algorithmen)

Algorithmen und Datenstrukturen 1

Bäume, Suchbäume und Hash-Tabellen

Einführung in Heuristische Suche

Geordnete Binärbäume

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

Parsing mit NLTK. Parsing mit NLTK. Parsing mit NLTK. Parsing mit NLTK. Beispiel: eine kleine kontextfreie Grammatik (cf. [BKL09], Ch. 8.

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

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Einführung in die Informatik 2

Klausur Informatik-Propädeutikum (Niedermeier/Hartung/Nichterlein, Wintersemester 2012/13)

Ein Graph ist ein Paar (V,E), wobei V eine Menge von Knoten und E eine Menge von Kanten (v,w) mit v,w in V ist.

Informatik II Backtracking

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

Algorithmen und Datenstrukturen 2

Einführung Computerlinguistik. Konstituentensyntax II

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Kompaktkurs Python Einführung in die Programmierung zur Numerik mit Python

Algorithmen und Datenstrukturen 2

Programmier-Befehle - Woche 10

Transkript:

Programmierkurs Python II Michaela Regneri & Stefan Thater FR 4.7 Allgemeine Linguistik (Computerlinguistik) Universität des Saarlandes Sommersemester 2011 Prüfungsleistungen Klausur am Semesterende - Zulassung: >50% der Punkte in den Übungsaufgaben Programmierprojekt Endnote - Klausur 50%, Projekt 50% 2

Kursübersicht Datenstrukturen & Algorithmen - Bäume & Graphen - Graph-Algorithmen Endliche Automaten & Transduktoren Maschinelles Lernen - Naive Bayes Classifier - Vektormodelle Kontextfreie Grammatiken & Parsing - Elementare Algorithmen - Chart-Parsing - Probabilistische kontextfreie Grammatiken 3 Heute: Kurze Wiederholung zu Python Bäume - Definition - Implementierung - Parsen von Baum-Ausdrücken - Suche in Bäumen (Tiefensuche) 4

Kurze Wiederholung Funktionen Rekursion Klassen Iteratoren Generatoren List-Comprehension 5 Wiederholung: Funktionen def fib(n): a, b = 0, 1 for i in range(n): a, b = b, a + b return a 6

Wiederholung: Rekursion def fib(n): if n < 2: return n else: return fib(n - 1) + fib(n - 2) 7 Wiederholung: Bsp. Wörter zählen def wc(filename): freq = dict() with open(filename) as f: for line in f: for word in line.split(): freq[word] = freq.get(word,0) +1 for (word, frq) in freq.items(): print('{0:s}\t{1:d}'.format(word, frq)) 8

Wiederholung: Klassen class MyClass(BaseClass): def init (self,...): <self initialisieren> def mymethod(self,...):... @staticmethod def mystaticmethod(...): # kein self... @classmethod def myclassmethod(cls,...): # cls statt self... 9 Wiederholung: Iteratoren class FibIt: def init (self): self.a = 0 self.b = 1 def iter (self): return self def next (self): this = self.a self.a, self.b = self.b, self.a + self.b return this 10

Kurze Wiederholung: Generatoren def fibit(): a, b = 0, 1 while True: yield a a, b = b, a + b 11 Kurze Wiederholung: Comprehensions lst = [1, 2, 3, 4] [x * 2 for x in lst] [2, 4, 6, 8] [x for x in lst if x % 2 == 0] [2, 4] (x for x in lst if x % 2 == 0) <generator object <genexpr> at...> sum(x for x in lst if x % 2 == 0) 6 12

Bäume Text 13 Bäume S NP VP DT V NP This is DT N a tree 14

Bäume Bestandteile - Menge von Knoten (nodes, vertices) b - Menge von Kanten (edges) Hier immer gerichtete Bäume: - Kanten haben eine Quelle (source) und ein Ziel (target) - Im Bild: Quelle über (nördlich) Ziel Jeder Knoten hat höchstens eine eingehende Kante ( keine Zyklen) Knoten können etikettiert sein (Etikett = label) a c d e f 15 Bäume Quelle und Ziel nennen wir auch Mutter und Tochter (auch: Vater-Sohn, Eltern-Kind, Vorgänger-Nachfolger) Knoten mit gleichem Vater heißen entsprechend Geschwister Der einzige Knoten ohne Vorgänger ist die Wurzel (root) Wenn es mehrere Wurzeln gibt (= die Knoten hängen nicht zusammen) sprechen wir von einem Wald Knoten ohne Nachfolger heißen Blätter (leaves) b Blätter a Wurzel c d e f 16

Bäume Bäume kann man leicht als rekursive b c Datenstruktur implementieren: Baum = Wurzel-Etikett + Liste von Bäumen d e f Zum Beispiel: ( a,[( b,[]),( c,[( d,[]),( e,[]),( f,[])])]) Beachte: - a, b, sind eigentlich nur Etiketten, keine Knoten - Ein Knoten repräsentiert Teilbaum von sich selbst - Bäume sind hier auch geordnet, dh. die Reihenfolge in der Teilbaumliste ist wichtig a 17 Bäume (objektorientiert) class Tree: def init (self, label, children): self.label = label self.children = children... 18

Baumausdrücke Parsen (String Baum) Eingabe: Zeichenkette, die einen Baum beschreibt Format: - Baum ::= Etikett ( Etikett Baum... Baum ) - Etikett ::= beliebige Zeichenkette ohne (, ), Leerzeichen Beipiel: (S (NP (DET Der) (N Student)) (VP (V arbeitet))) Ausgabe: Baum als rekursive Datenstruktur 19 Baumausdrücke Parsen (String Baum) def parse(strng): tokens = tokenize(strng) return tree(next(tokens), tokens) def tokenize(strng): return <Iterator über die Tokens in strng> (S (NP (DET Der) (N Student)) (VP (V arbeitet))) 20

Baumausdrücke Parsen (String Baum) def tree(token, tokens): if token == '(': return Tree(next(tokens), list(trees(tokens))) else: return Tree(token, []) def trees(tokens): while True: token = next(tokens) if token == ')': break yield tree(token, tokens) (S (NP (DET Der) (N Student)) (VP (V arbeitet))) 21 Tiefensuche Mit Traversierung bezeichnen wir das Untersuchen der Knoten eines Baumes in einer bestimmten Reihenfolge Tiefensuche (depth first search) - zuerst betrachtet wir die Kinder eines Knotens - danach seine Geschwister. d b e a f c 22

Post-Order vs. Pre-Order Es gibt verschiedene Möglichkeiten, die Knoten eines Baumes mit Tiefensuche zu traversieren Pre-Order: jeder Knoten wird vor seinen Kindern betrachtet Post-Order: jeder Knoten wird nach seinen Kindern betrachtet 1 a 2 b 6 c 3 d 4 e 5 f 6 a 4 b 5 c 1 d 2 e 3 f 23 Tiefensuche (Pre-Order, Iterator) class TreeIterator: def init (self, tree): self.agenda = [tree] def iter (self): return self def next (self): if self.agenda == []: raise StopIteration current_tree = self.agenda.pop() for child in reversed(current_tree.children): self.agenda.append(child) return current_tree 24

Tiefensuche (Pre-Order, Generator) def TreeIterator(tree): yield tree for child in tree.children: for desc in TreeIterator(child): yield desc 25