Mathematisches Praktikum - SoSe 2015

Größe: px
Ab Seite anzeigen:

Download "Mathematisches Praktikum - SoSe 2015"

Transkript

1 Mathematisches Praktikum - SoSe 2015 Prof. Dr. Wolfgang Dahmen Felix Gruber, Igor Voulis Aufgabe 4 Bearbeitungszeit: drei Wochen (bis Freitag, 5. Juni 2015) Mathematischer Hintergrund: String-Matching-Algorithmen, Hash-Funktionen Elemente von C ++ : Schleifen, Funktionen, Vektoren (STL), Klassen, Doxygen Einleitung Bei vielen verschiedenen Problemstellungen ist es wichtig, einen vorgegebenen Text in einem anderen Text zu finden und seine Position zurück zu geben. Beispiele für Anwendungen sind das Suchen auf Webseiten oder das Aufspüren von Plagiaten. Algorithmen, die sich mit diesem Problem beschäftigen, sind die so genannten String-Matching-Algorithmen. In dieser Übung werden wir verschiedene String-Matching-Algorithmen implementieren und auch vergleichen. String-Matching-Algorithmen Das String-Matching-Problem besteht, grob gesprochen, darin, einen Text (Pattern) in einem anderen Text zu finden. Formal ausgedrückt betrachten wir folgendes Problem. Definition 1 (String-Matching Problem) Gegeben sei ein Alphabet Σ, ein Wort p = p 1 p 2... p k Σ k (Pattern) der Länge k N und ein Text T = T 1... T n Σ * der Länge n N. Hierbei bezeichnet Σ * die Menge aller Texte, die aus dem Alphabet Σ gebildet werden können. Das String-Matching Problem besteht darin, alle i {1,..., n} mit T i... T i+k 1 = p 1... p k zu finden. Grundlegend basieren die hier verwendeten Algorithmen darauf, das Pattern unter den Anfang des Textes zu schreiben und dann immer wieder die folgenden zwei Schritte durchzuführen: a.) Vergleiche: Vergleiche das Pattern mit dem Text b.) Verschiebe: Verschiebe das Pattern unter dem Text zur nächsten Position T : 1. Vergleiche P : 2. Verschiebe Abbildung 1: Allgemeine Vorgehensweise eines String-Matching-Algorithmus. Es stellt sich nun die Frage, wie man das Verschieben und das Vergleichen optimieren kann, um einen schnellen Algorithmus zu erhalten, welcher mit möglichst wenigen Vergleichen auskommt. Hierzu betrachten wir zunächst eine simple Version des Algorithmus. 1

2 Ein erster naiver Ansatz Unser erster naiver Ansatz vergleicht das Pattern jeweils von links nach rechts mit dem Text und verschiebt es anschließend um eine Position. Es ist leicht ersichtlich, dass dieses Vorgehen bei bestimmten Wörtern zu einer hohen Anzahl an Vergleichen führen kann. Derartige Wörter sind allerdings im Falle einer natürlichen Sprache eher selten, sodass der Algorithmus bereits eine relativ gute Laufzeit hat, welche jedoch noch stark verbessert werden kann. Beispiel 1 Wir betrachten den Text AABAAAABAAB und das Pattern AABAAB. Die Anwendung des naiven Algorithmus ist in Abbildung 2 dargestellt. A A B A A Abbildung 2: Beispiel 1: Suche mit dem naiven Algorithmus. Erfolgreiche Vergleiche sind fett markiert, fehlerhafte Vergleiche sind kursiv mit grauem Hintergrund dargestellt. Verbesserte Algorithmen Um den naiven Algorithmus zu verbessern, stellen wir uns folgende zwei Fragen: a.) Kann ich durch die Kenntnis des Patterns p Vergleiche einsparen? b.) Kann ich den Vergleich des Patterns mit dem Text vereinfachen? Die nun folgenden Algorithmen optimieren den naiven Algorithmus unter dem Gesichtspunkt jeweils einer der obigen Fragen. Knuth-Morris-Pratt-Algorithmus Der Knuth-Morris-Pratt-Algorithmus (KMP) wurde 1977[3] veröffentlicht und verbessert den naiven Algorithmus durch eine Patternanalyse. Die Idee hinter dem Algorithmus ist, dass wenn ein Teil des Pattern p welches erfolgreich verglichen wurde, ein Suffix besitzt das Präfix des Pattern ist, so kann man mit diesem Suffix starten und so die entsprechenden Vergleiche sparen. Somit wird zuerst für jeden Teilstring p 1... p i untersucht, was das längste echte Suffix ist, welches zugleich ein Präfix ist. Dazu wird eine Funktion f aufgestellt, die zu einer vorgegebenen Länge die Länge des Präfix angibt, das bereits bekannt ist. Setze f (0) =-1 Betrachte p [1]... p[i] mit i=1,...,k Finde l, so dass p[i-l +1]... p[i]=p [1]... p[l] mit l maximal und i-l >=1 Setze f(i)=l Die Suche startet wie die naive Suche, allerdings wird im Fall eines fehlerhaften Vergleichs oder eines erfolgreichen Fundes die nächste Position anders bestimmt. 2

3 Starte den Vergleich mit s =1 und i =1 ( s entspricht der aktuellen Position im Text, ab der verglichen wird, und i der Position im Pattern ) Vergleiche solange bis T[s+i -1]!= p[i] oder i=k gilt Setzte s=s+(i -1) -f(i -1) und i=f(i -1) +1 Starte den naechsten Vergleich Beispiel 2 Wir betrachten wieder den Text AABAAAABAAB und das Pattern AABAAB. Wir wollen den Knuth-Morris-Pratt Algorithmus anwenden, d.h. wir analysieren zunächst das Pattern, siehe Abbildung 3. In Abbildung 4 ist die Suche dargestellt. 0 AABAAB 1 A AABAAB 2 AA AABAAB 3 AAB AABAAB 4 AABA AABAAB 5 AABAA AABAAB 6 AABAAB AABAAB Abbildung 3: Pattern Analyse für den Knuth-Morris-Pratt Algorithmus. Erste Spalte: Länge des gefundenen Teils, zweite Spalte: entsprechender gefundener String und letzte Spalte: das Pattern selber. Fett makiert ist das Suffix des gefundenen Strigs, welches Präfix des Patterns ist. A A B A A Abbildung 4: Beispiel 2: Suche nach dem Wort AABAAB mit Hilfe des Knuth-Morris-Pratt Algorithmus. Erfolgreiche Vergleiche sind fett markiert, fehlerhafte Vergleiche sind kursiv mit grauem Hintergrund dargestellt. Boyer-Moore-Algorithmus Der nun folgende Algorithmus wurde 1977[1] von Boyer und Moore vorgestellt. Verglichen mit dem vorherigen Algorithmus wird das Pattern noch genauer untersucht. Wie zuvor beginnen wir am Anfang des Textes, vergleichen allerdings nicht von links nach rechts, sondern von rechts nach links. Wir beginnen also mit dem letzten Buchstaben des Patterns. Sobald eine Ungleichheit auftritt, gibt es zwei Möglichkeiten, das Pattern zu verschieben. Hierbei wird immer die maximale Verschiebung verwendet: Ist a der verglichene Buchstabe im Text, so wird im Pattern das letzte Vorkommen des Buchstaben a gesucht und das Pattern soweit verschoben, bis die beiden gleichen Buchstaben untereinander stehen, wobei allerdings immer mindestens um eine Position nach rechts verschoben wird. Entspricht das verglichene Endstück einem Teilwort des Patterns, so wird das Pattern soweit nach rechts verschoben, bis die beiden Teile übereinander liegen. Gibt es mehrere Teilworte, welche dem Endstück entsprechen, so wird das weiter hinten liegende ausgewählt. Falls keine der beiden Regeln greift, wird das Pattern um seine komplette Länge verschoben. Es kann vorkommen, dass die Regeln eine Verschiebung in negative Richtung empfehlen, dann wird immer um 1 verschoben. 3

4 Wie beim Knuth-Morris-Pratt-Algorithmus wird vor der eigentlichen Suche das Pattern analysiert und in einer Sprungtabelle gespeichert. Beispiel 3 Wir betrachten wieder den Text AABAAAABAAB und das Pattern AABAAB. Wir wollen den Boyer-Moore Algorithmus anwenden, d.h. wir analysieren zunächst das Pattern, siehe Abbildung 5. In Abbildung 6 ist die Suche dargestellt. A 1 B 0 0 AABAAB 1 B AABAAB 2 AB AABAAB 3 AAB AABAAB 4 BAAB AABAAB 5 ABAAB AABAAB 6 AABAAB AABAAB Abbildung 5: links: erste Regel (Position vom letzten Buchstaben aus gesehen), rechts: zweite Regel A A B A A Abbildung 6: Suche mit dem Boyer-Moore Algorithmus. Fett: erfolgreicher Vergleich, kursiv und grauer Hintergrund: fehlerhafter Vergleich Algorithmus mit Hash-Funktion Ziel der vorherigen Algorithmen war es, durch eine Analyse des Patterns die Anzahl an Vergleichen zu minimieren. Der nun folgende Algorithmus versucht, den Vergleich s i... s i+k 1 = p 1... p k so zu vereinfachen, dass möglichst schnell eine kleine Obermenge an möglichen Treffern generiert wird. Hierbei soll insbesondere nicht Buchstabe für Buchstabe verglichen werden. T : 1. Vergleiche P : 2. Verschiebe Abbildung 7: Allgemeine Vorgehensweise des Rabin-Karp Algoritmus. Hash-Funktionen Im Allgemeinen bilden Hash-Funktionen die Elemente aus einer (evtl. unendlich) großen Menge von Werten auf eine kleine Menge von Hash-Werten ab. Definition 2 (Hash-Funktion) Eine Abbildung h : S K heißt Hash-Funktion, wenn S K gilt. 4

5 In unserem Fall wäre dies z.b. eine Abbildung h : Σ i {0,..., 9} j, mit i, j N. In unserer Anwendung müssen wir schnell zwei Hash-Werte vergleichen. Hierzu verwenden wir sogenannte Hash-Tabellen. Definition 3 (Hash-Tabelle) Die Tabelle definiert durch die Abbildung t : K {0, 1} wird Hash-Tabelle genannt. Möchten wir p mit den Werten w 1,..., w n vergleichen, so berechnen wir die Hash-Werte der entsprechenden Eingaben und setzten t(h(p)) = 1. Nun können wir t(h(w i )) berechnen und überprüfen, ob dort eine 1 oder 0 steht. Das Setzen und Überprüfen ist verglichen mit dem direkten Vergleich der Hash-Werte sehr effizient. Es können allerdings Kollisionen auftreten: zwei Werte aus S können den gleichen Hash-Wert haben. Wir erhalten also lediglich eine Obermenge der eigentlichen Lösungsmenge. Rabin-Karp-Algorithmus Der Rabin-Karp-Algorithmus[2] wurde 1987 vorgestellt und verwendet zum Vergleich in Abbildung 7 eine Hash-Funktion h. Mit Hilfe der Hash-Funktion wird eine Liste von möglichen Treffern generiert, welche dann noch überprüft werden muss. Berechne h1 = h( p) und speichere h1 in einer Hashtabelle Fuer s=1,...,n-k+1 berechne h2 = h(t[s ]... T[s+k -1]) Vergleiche h1 und h2 mit Hilfe der Hashtabelle Vergleiche alle Treffer mit p Die entscheidene Frage ist, was eine geeignete Hash-Funktion ist. Wenn der Hashwert für jedes s komplett neu berechnet werden muss, ist anzunehmen, dass der Algorithmus nicht schneller läuft als der naive Algorithmus. Daher verlangen wir einen bestimmten Typ von Hashfunktionen. Definition 4 (Rolling-Hash-Funktion) Eine Hashfunktion h heißt rolling-hash-funktion, wenn es eine Funktion r : Σ Σ K gibt, die aus dem Hashwert zu w 1... w k und den Buchstaben w 1 und w k+1 den Hashwert zu w 2... w k+1 berechnen kann. Genauer gesagt soll folgende Identität gelten: h(w 2 w 3 w 4... w k+1 ) = r(w 1, w k+1, h(w 1 w 2 w 3... w k )) Folgende zwei Hash-Funktionen sind rolling-hash-funktionen. h 1 (w 1... w k ) = k char(w i ) i=1 h 2 (w 1... w k ) = k char(w i ) a k i i=1 mod z, wobei a eine Zahl und z eine Primzahl ist Bei der zweiten Hash-Funktion stellt sich die Frage, wie man die Funktion r(w 1, w k, h(w 1 w 2 w 3... w k 1 )) implementieren kann. Hierzu benötigen wir den Wert q := a k mod z. Damit lässt sich die roll-funktion wie folgt implementieren: r(w 1, w k+1, h old ) = (h old a + char(w k+1 ) + z (q char(w 1 ) mod z)) mod z 5

6 Suche nach mehreren Patterns Bei der Suche nach mehreren Patterns zeigt sich der Vorteil des Rabin-Karp-Algorithmus, wenn die Wörter eine ähnliche Länge haben. Durch die Sprungtabellen und Abbruchkriterien bei den ersten drei Verfahren kann man diese nicht parallel für die Suche nach mehreren Patterns verwenden, sondern muss nacheinander nach den entsprechenden Patterns suchen. Bei dem Rabin-Karp-Algorithmus sieht dies etwas anders aus. Haben wir mehrere Patterns, die gleich lang sind, so könnnen wir gleichzeitig nach den entsprechenden Hash-Werten suchen. Bei unterschiedlich langen Patterns, können wir die Patterns auf eine gemeinsame Länge kürzen und so schnell eine grobe Obermenge an möglichen Treffern generieren. Hierbei ist zu beachten, dass bei der Hashfunktion Kollisionen auftreten können. Daher verwenden wir eine Hash-Tabelle, in welcher statt 0 bzw. 1 eine Liste von Patterns steht, welche den gegebenen Hash-Wert besitzten. Aufgabe Ziel dieses Übungsblattes ist es mehrere Verfahren zum Finden von einem oder mehreren Strings in einem Text zu implementieren. Hierzu finden Sie eine Code-Basis, in der Sie an verschiedenen Stellen die Algorithmen implementieren sollen. Das Grundgerüst des Programms ist in den Dateien string_matching.cpp, algo.h, hash.h und util.h gegeben. Machen Sie sich vor allem mit der Klassenstruktur der Algorithmen vertraut. Um sich mit den Funktionen und Klassen vertraut zu machen, wurden die bereits implementierten Funktionen mit Doxygen 1 dokumentiert. Ihre Aufgabe ist es die Funktionen, die Sie implementieren, ebenfalls mit Doxygen zu dokumentieren. Algorithmen In der Datei algo.h ist das Grundgerüst für die Algorithmen gegeben. Es sollen die Funktionen zum Suchen von einem oder mehreren Pattern implementiert werden. Für die Suche nach einem Pattern sind dies die Funktionen Naiv :: find_single ( string &s, string &p, vector <int > & result ) KnuthMorrisPratt :: find_ single ( string & s, string & p, vector < int > & result ) BoyerMoore :: find_single ( string &s, string &p, vector <int > & result ) RabinKarp <H >:: find_single ( string &s, string &p, vector <int > & result ) Da ein Pattern öfters in einem Text vorkommen kann, werden die Positionen des ersten Buchstabens jedes Treffers in dem Vektor result gespeichert. Die Suche nach mehereren Pattern läuft für die Algorithmen Naiv, KnuthMorrisPratt und BoyerMoore ähnlich ab. Daher muss hierfür nur eine Funktion implementiert werden. Simple :: find_multiple ( string &s, vector < string > &p, vector < vector <int > > & result ) RabinKarp <H >:: find_multiple ( string &s, vector < string > &p, vector < vector <int > > & result ) In result wird das Endergebnis gespeichert, d.h. für das Pattern p[i] werden in result[i] die Positionen des ersten Buchstabens jedes Treffers gespeichert

7 Hashfunktionen Das Grundgerüst einer Hash-Funktion ist durch die Klasse RollingHash in der Datei hash.h gegeben. Die Aufgabe besteht nun darin, für die beiden Hash-Funktionen h 1 (HashSimple) und h 2 (HashBetter) zu implementieren. Hierzu soll eine Funktion zum Berechnen des kompletten Hashwertes und die Funktion r implementiert werden: HashSimple :: set ( string &s) HashSimple :: roll ( char &del, char & add ) HashBetter :: set ( string &s) HashBetter :: roll ( char &del, char & add ) Endergebnis Um das Endergebnis mit der korrekten Lösung zu vergleichen, wird am Ende der Suche nach mehreren Patterns die Funktion finish_multiple aufgerufen. Hierbei wird auch die Anzahl an Vergleichen mit der korrekten Lösung verglichen. Aus diesem Grund dürfen die Funktionen start, start_multiple, finish und finish_multiple nicht gelöscht werden. Doxygen Doxygen ist ein Programm, das dabei hilft eine umfangreiche Dokumentation zu einem Projekt zu erstellen. Hierzu muss der Code in einer bestimmten Art und Weise kommentiert sein. Doxygen kann nun diese Kommentare lesen und erstellt eine HTML-Dokumentation des Projektes. Ein Teil des Codes ist schon in der für Doxygen lesbaren Weise kommentiert. Um die Dokumentation zu erstellen gibt es die Datei doxyfile, welche die wichtigsten Parameter setzt, um die Dokumentation zu generieren. Erzeugt werden kann die HTML-Dokumentation mit dem Befehl doxygen doxyfile. Nachdem das Programm durchgelaufen ist, existiert ein Ordner doxygen/html. In diesem Ordner wurde die Datei index.html erstellt, welche mit einem Browser geöffnet werden kann. Um zu sehen wie beispielsweise eine Klasse dokumentiert werden kann, schauen wir uns die Dokumentation der Klasse HashList an: /** * \ brief Klasse zum Speichern von Daten in einer Hash - Tabelle. Ein Objekt der Klasse repraesentiert eine Liste von Elementen, wobei next immer auf das naechste Objekt der Liste zeigt. * \ param value Wert der an dieser Stelle gespeichert werden soll * \ param next Naechstes Element der Liste */ Dieser Kommentar muss unmittelbar vor der Klassendefinition stehe, damit Doxygen weiß, zu welcher Klasse er gehört. Nun gibt der Befehl \brief eine kurze Beschreibung der Klasse an. Mit \param werden alle Variablen der Klasse erklärt. Hierbei gibt der erste Wert nach \param den Namen der Variablen an und danach kommt die Beschreibung. Möchte man eine Methode erklären, verwendet man die selben Befehle, nur dass diesemal mit param die Funktionsparamenter erklärt werden. Ein weiterer Vorteil von Doxygen ist, dass man auch Latex-Befehle verwenden kann. So kann man zum Beispiel mit \f[... \f] eine Formel zum Text hinzufügen. Weitere Informationen zu Doxygen finden sich in der offiziellen Dokumentation

8 Literatur [1] Boyer, R. S. und J. S. Moore: A fast string searching algorithm. Communications of the ACM, 20(10): , [2] Karp, R. M. und M. O. Rabin: Efficient randomized pattern-matching algorithms. IBM Journal of Research and Development, 31(2): , [3] Knuth, D. E., J. H. Morris und V. R. Pratt: Fast Pattern Matching in Strings. SIAM Journal of Computing, 6(2): ,

Mathematisches Praktikum - SoSe 2014

Mathematisches Praktikum - SoSe 2014 Mathematisches Praktikum - SoSe 2014 Prof. Dr. Wolfgang Dahmen Felix Gruber, M. Sc., Christian Löbbert, M. Sc., Yuanjun Zhang, M. Sc., Klaus Kaiser, M. Sc. Aufgabe 3 Bearbeitungszeit: zwei Wochen (bis

Mehr

Effiziente Algorithmen 2

Effiziente 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

Mehr

Algorithmische Bioinformatik 1

Algorithmische 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

Mehr

Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41

Zeichenketten. Michael Fularczyk Michael Fularczyk Zeichenketten / 41 Zeichenketten Michael Fularczyk 17.05.2011 Michael Fularczyk Zeichenketten 17.05.2011 1 / 41 Inhalt Zeichenketten Zeichensätze Darstellung Suchverfahren naive Stringsuche Knuth-Morris-Pratt Boyer-Moore

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Prof. Martin Lercher Institut für Informatik Heinrich-Heine-Universität Düsseldorf Teil 4 Suchen in Texten Version vom: 15. November 2016 1 / 39 Vorlesung 8 15. November

Mehr

2.2 Der Algorithmus von Knuth, Morris und Pratt

2.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

Zeichenketten. 29. April 2015 Benedikt Lorch. Benedikt Lorch Zeichenketten April

Zeichenketten. 29. April 2015 Benedikt Lorch. Benedikt Lorch Zeichenketten April Vorlage Zeichenketten 29. April 2015 Benedikt Lorch Benedikt Lorch Zeichenketten 17. 29. April 2015 1 Motivation String Matching in the DNA Alphabet 1 Σ DNA = {A, G, C, T} DNA Text: 1 982 672 Zeichen Suchstring:

Mehr

Praktikum Algorithmische Anwendungen WS 2006/07 Ausarbeitung: Schnelle Stringsuchalgorithmen Boyer-Moore und Knuth-Morris-Pratt

Praktikum Algorithmische Anwendungen WS 2006/07 Ausarbeitung: Schnelle Stringsuchalgorithmen Boyer-Moore und Knuth-Morris-Pratt Praktikum Algorithmische Anwendungen WS 2006/07 Ausarbeitung: Schnelle Stringsuchalgorithmen Boyer-Moore und Knuth-Morris-Pratt Team A Rot Daniel Baldes (Nr. 11041002, ai688@gm.fh-koeln.de) Holger Pontius

Mehr

Algorithmen auf Zeichenketten

Algorithmen auf Zeichenketten Algorithmen auf Zeichenketten Rabin-Karp Algorithmus Christoph Hermes hermes@hausmilbe.de Zeichenketten: Rabin-Karp Algorithmus p. 1/19 Ausblick auf den Vortrag theoretische Grundlagen... Zeichenketten:

Mehr

String - Matching. Kapitel Definition

String - Matching. Kapitel Definition Kapitel 1 String - Matching 1.1 Definition String - Matching ( übersetzt in etwa Zeichenkettenanpassung ) ist die Suche eines Musters ( Pattern ) in einem Text. Es findet beispielsweise Anwendung bei der

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Suchen Bisher: Sequentielle Suche Binäre Suche Interpolationssuche Jetzt: Suchen in Zeichenfolgen 2 1 Suchen in Zeichenfolgen Das Problem:

Mehr

1.8 Shift-And-Algorithmus

1.8 Shift-And-Algorithmus .8 Shift-And-Algorithmus nutzt durch Bitoperationen mögliche Parallelisierung Theoretischer Hintergrund: Nichtdeterministischer endlicher Automat Laufzeit: Θ(n), falls die Länge des Suchwortes nicht größer

Mehr

Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Sommersemester Dr. Tobias Lasser

Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Sommersemester Dr. Tobias Lasser Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 06 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute 7 Fortgeschrittene Datenstrukturen 8 Such-Algorithmen

Mehr

Informatik II, SS 2016

Informatik II, SS 2016 Informatik II - SS 2016 (Algorithmen & Datenstrukturen) Vorlesung 20 (13.7.2016) String Matching (Textsuche) Algorithmen und Komplexität Textsuche / String Matching Gegeben: Zwei Zeichenketten (Strings)

Mehr

Algorithmen und Datenstrukturen II. Suchen in Texten. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Algorithmen und Datenstrukturen II. Suchen in Texten. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München Algorithmen und Datenstrukturen II Suchen in Texten Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 27.03.2018 06:32 Inhaltsverzeichnis Ein Text.......................................

Mehr

Algorithmische Bioinformatik 1

Algorithmische 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

Mehr

Boyer Moore Algorithmus

Boyer Moore Algorithmus LMU, CIS, SoSe 2006 Veranstaltung: Programmierung von Stringmatchingalgorithmen in C Kursleiter: Max Hadersbeck Referenten: Galina Hinova Stefan Partusch Andreas Neumann Die Erfinder J Strother Moore J.

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 7 (21.5.2014) Binäre Suche, Hashtabellen I Algorithmen und Komplexität Abstrakte Datentypen : Dictionary Dictionary: (auch: Maps, assoziative

Mehr

Proseminar String Matching

Proseminar String Matching Proseminar Textsuche Proseminar String Matching PD Dr. habil. Hanjo Täubig Lehrstuhl für Theoretische Informatik (Prof. Dr. Susanne Albers) Institut für Informatik Technische Universität München Wintersemester

Mehr

Zeichenketten. Hallo Welt für Fortgeschrittene Daniel Wust Informatik 2 Programmiersysteme Martensstraße Erlangen

Zeichenketten. Hallo Welt für Fortgeschrittene Daniel Wust Informatik 2 Programmiersysteme Martensstraße Erlangen Zeichenketten Hallo Welt für Fortgeschrittene Daniel Wust 23.04.2013 Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Zeichenketten ASCII Regionsspezifische Erweiterungen Unicode Speicherung

Mehr

Algorithmische Bioinformatik 1

Algorithmische 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

Mehr

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

Suchen in Texten. Naives Suchen Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuchen Editierdistanz Suchen in Texten Naives Suchen Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuchen Editierdistanz Textsuche Gegeben ist ein Zeichensatz (Alphabet) Σ. Für einen Text T Σ n und

Mehr

Universität Bremen. Textsuche. Thomas Röfer. Naive Suche Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuche Editierdistanz

Universität Bremen. Textsuche. Thomas Röfer. Naive Suche Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuche Editierdistanz Textsuche Thomas Röfer Naive Suche Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuche Editierdistanz Rückblick Graphenalgorithmen Scan-Line-Prinzip Adjazenzmatrix Adjazenzlisten

Mehr

Kapitel 5. Textalgorithmen. 5.1 Grundbegriffe

Kapitel 5. Textalgorithmen. 5.1 Grundbegriffe Kapitel 5 Textalgorithmen 5.1 Grundbegriffe Wir beschäftigen uns hauptsächlich mit Textsuche (und Varianten). Gegeben: Alphabet Σ (mindestens zwei Buchstaben). Text S = s 1... s n Σ in Array S[1..n]. Muster

Mehr

Proseminar "Pattern Matching"

Proseminar Pattern Matching Proseminar "Pattern Matching" Grundlegende Such-Algorithmen Stephan Reichelt Wintersemester 2001/2002 2 1. Einführung Wozu muss man in Zeichenfolgen suchen? => Daten sind oft nicht in Datensätze (ähnlich

Mehr

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 2. Spezifikation Schrittweise Verfeinerung

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 2. Spezifikation Schrittweise Verfeinerung UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1 Übung 2 Spezifikation Schrittweise Verfeinerung Institut für Pervasive Computing Johannes Kepler Universität Linz Altenberger Straße 69,

Mehr

Einführung in die Informatik 2

Einführung in die Informatik 2 Einführung in die Informatik 2 Suchen in Texten Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 Sven.Kosub@uni-konstanz.de Sprechstunde: Freitag, 12:30-14:00 Uhr, o.n.v.

Mehr

Die Nerode-Relation und der Index einer Sprache L

Die Nerode-Relation und der Index einer Sprache L Die Nerode-Relation und der Index einer Sprache L Eine zweite zentrale Idee: Sei A ein vollständiger DFA für die Sprache L. Repäsentiere einen beliebigen Zustand p von A durch die Worte in Σ, die zu p

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Semestralklausur Einführung in die Programmierung Semestralklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList

Mehr

ADS: Algorithmen und Datenstrukturen 1

ADS: Algorithmen und Datenstrukturen 1 ADS: Algorithmen und Datenstrukturen 1 Teil 12 Uwe Quasthoff Institut für Informatik Abteilung Automatische Sprachverarbeitung Universität Leipzig 16. Januar 2018 [Letzte Aktualisierung: 15/01/2018, 15:02]

Mehr

Berühmte Informatiker

Berühmte Informatiker Berühmte Informatiker Teil 10: J. Backus & D. E. Knuth 1924-1938- * 03.12.1924 in Philadelphia John Backus Vorzeitiger Abbruch des Studiums der Chemie (1942) und der Medizin (1945) Während der Arbeit als

Mehr

Themen. Hashverfahren. Stefan Szalowski Programmierung II Hashverfahren

Themen. Hashverfahren. Stefan Szalowski Programmierung II Hashverfahren Themen Hashverfahren Einleitung Bisher: Suchen in logarithmischer Zeit --> Binärsuche Frage: Geht es eventuell noch schneller/effektiver? Finden von Schlüsseln in weniger als logarithmischer Zeit Wichtig

Mehr

5. Mustererkennung. Anwendungsbeispiele: suche Zeichenfolge in Text suche Bitmuster in Pixelbild. gegeben: endliches Alphabet Σ. Muster p Σ m, m IN

5. Mustererkennung. Anwendungsbeispiele: suche Zeichenfolge in Text suche Bitmuster in Pixelbild. gegeben: endliches Alphabet Σ. Muster p Σ m, m IN 5. Mustererkennung Anwendungsbeispiele: suche Zeichenfolge in Text suche Bitmuster in Pixelbild gegeben: endliches Alphabet Σ Text t Σ n, n IN Muster p Σ m, m IN gesucht: erste (bzw. jede) Position von

Mehr

Algorithmische Bioinformatik 1

Algorithmische 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 Paarweises

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Zeichenketten von Christopher Saloman Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht 1. Was sind Zeichenketten und wofür braucht man sie? 2. Suchen

Mehr

Teil VII. Hashverfahren

Teil VII. Hashverfahren Teil VII Hashverfahren Überblick 1 Hashverfahren: Prinzip 2 Hashfunktionen 3 Kollisionsstrategien 4 Aufwand 5 Hashen in Java Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 7 1 Hashverfahren:

Mehr

Algorithmen und Datenstrukturen II

Algorithmen und Datenstrukturen II Algorithmen und Datenstrukturen II Algorithmen zur Textverarbeitung III: D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009,

Mehr

Modul Algorithmik, T-Katalog

Modul Algorithmik, T-Katalog Modul Algorithmik, T-Katalog Sommersemester 2017 Steffen Lange 1/1, Folie 1 2017 Prof. Steffen Lange - HDa/FbI - Algorithmik Organisatorisches u Vorlesung Folien im Netz u Übung eine Übung alle 14 Tage

Mehr

= 7 (In Binärdarstellung: = 0111; Unterlauf) = -8 (In Binärdarstellung: = 1000; Überlauf)

= 7 (In Binärdarstellung: = 0111; Unterlauf) = -8 (In Binärdarstellung: = 1000; Überlauf) Musterlösung Übung 2 Aufgabe 1: Große Zahlen Das Ergebnis ist nicht immer richtig. Die Maschine erzeugt bei Zahlen, die zu groß sind um sie darstellen zu können einen Über- bzw. einen Unterlauf. Beispiele

Mehr

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Stud.-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

Mehr

Untersuchen Sie, inwiefern sich die folgenden Funktionen für die Verwendung als Hashfunktion eignen. Begründen Sie Ihre Antwort.

Untersuchen Sie, inwiefern sich die folgenden Funktionen für die Verwendung als Hashfunktion eignen. Begründen Sie Ihre Antwort. Prof. aa Dr. Ir. Joost-Pieter Katoen Christian Dehnert, Friedrich Gretz, Benjamin Kaminski, Thomas Ströder Tutoraufgabe 1 (Güte von Hashfunktionen): Untersuchen Sie, inwiefern sich die folgenden Funktionen

Mehr

Informatik II Übung, Woche 10

Informatik II Übung, Woche 10 Giuseppe Accaputo 10. März, 2016 Plan für heute 1. Typumwandlung (Typecasts) 2. Ordnerstruktur für Übungen 3. Vorbesprechung Übung 3 4. Nachbesprechung Übung 2 (inkl. Live Programmierung) Informatik II

Mehr

Kurze Einführung in die Benutzung des Dokumentationswerkzeugs Doxygen

Kurze Einführung in die Benutzung des Dokumentationswerkzeugs Doxygen Kurze Einführung in die Benutzung des Dokumentationswerkzeugs 2008 Gliederung 1 Zweck 2 Gliederung Zweck 1 Zweck 2 Zweck Zweck Erstellen einer übersichtlichen, zentralen Dokumentation im HTML-Format Überblick

Mehr

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen 2 Algorithmen und Datenstrukturen 2 Sommersemester 2006 8. Vorlesung Peter Stadler Universität Leipzig Institut für Informatik studla@bioinf.uni-leipzig.de Suche in Texten Einführung Suche in dynamischen

Mehr

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 5. Dezember 2016 Programmieren I 5. Übungsblatt Hinweis: Auf diesem und den folgenden Übungsblättern

Mehr

Übung Praktische Informatik I

Übung Praktische Informatik I Übung Praktische Informatik I HWS 2008/2009 Benjamin Guthier Lehrstuhl für Praktische Informatik IV Universität Mannheim guthier@pi4.informatik.uni-mannheim.de 24.10.08 6-1 Heutige große Übung Hinweise

Mehr

Theoretische Informatik

Theoretische Informatik Theoretische Informatik Sommersemester 2016 Steffen Lange 0/1, Folie 1 2016 Prof. Steffen Lange - HDa/FbI - Theoretische Informatik Literatur S. Lange, M. Margraf, Theoretische Informatik, Lehrmaterial

Mehr

Informatik II, SS 2018

Informatik II, SS 2018 Informatik II - SS 2018 (Algorithmen & Datenstrukturen) Vorlesung 6 (7.5.2018) Dictionaries, Binäre Suche, Hashtabellen I / Yannic Maus Algorithmen und Komplexität Abstrakte Datentypen : Dictionary Dictionary:

Mehr

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Strings. Daten aus Dateien einlesen und in Dateien speichern. Strings. Daten aus Dateien einlesen und in Dateien speichern. Strings Ein String ist eine Zeichenkette, welche von MATLAB nicht als Programmcode interpretiert wird. Der Ausdruck 'a' ist ein String bestehend

Mehr

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

Algorithmen 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

Mehr

Grundlagen Theoretischer Informatik I SoSe 2011 in Trier. Henning Fernau Universität Trier

Grundlagen Theoretischer Informatik I SoSe 2011 in Trier. Henning Fernau Universität Trier Grundlagen Theoretischer Informatik I SoSe 2011 in Trier Henning Fernau Universität Trier fernau@uni-trier.de 1 Grundlagen Theoretischer Informatik I Gesamtübersicht Organisatorisches; Einführung Logik

Mehr

Parallele Algorithmen in der Bildverarbeitung

Parallele Algorithmen in der Bildverarbeitung Seminar über Algorithmen - SoSe 2009 Parallele Algorithmen in der Bildverarbeitung von Christopher Keiner 1 Allgemeines 1.1 Einleitung Parallele Algorithmen gewinnen immer stärker an Bedeutung. Es existieren

Mehr

Kapitel 1. Exakte Suche nach einem Wort. R. Stiebe: Textalgorithmen, WS 2003/04 11

Kapitel 1. Exakte Suche nach einem Wort. R. Stiebe: Textalgorithmen, WS 2003/04 11 Kapitel 1 Exakte Suche nach einem Wort R. Stiebe: Textalgorithmen, WS 2003/04 11 Überblick Aufgabenstellung Gegeben: Text T Σ, Suchwort Σ mit T = n, = m, Σ = σ Gesucht: alle Vorkommen von in T Es gibt

Mehr

Verhalten. Def. und Nutzen von Verhalten. Pseudocode Schreibtischtest. Algorithmen

Verhalten. Def. und Nutzen von Verhalten. Pseudocode Schreibtischtest. Algorithmen Verhalten Def. und Nutzen von Verhalten Algorithmen Pseudocode Schreibtischtest Verhalten & Pseudocode Das Verhalten beschreibt, wie sich die Datenstrukturen (Variablen) eines Programms verändern müssen,

Mehr

Das Generalized Birthday Problem

Das Generalized Birthday Problem Das Generalized Birthday Problem Problem Birthday Gegeben: L 1, L 2 Listen mit Elementen aus {0, 1} n Gesucht: x 1 L 1 und x 2 L 2 mit x 1 x 2 = 0. Anwendungen: Meet-in-the-Middle Angriffe (z.b. für RSA,

Mehr

Dokumentieren mit Eclipse und Doxygen

Dokumentieren mit Eclipse und Doxygen Dokumentieren mit Eclipse und Doxygen Boris Budweg, 28.11.2009 Version 0.2 Abstract: Kurze Anleitung für die Benutzung von Doxygen und Eclox in Eclipse. Doxygen-Kommentare / Schlüsselwörter...2 Beispiel...2

Mehr

Benutzerdefinierte Housekeepinglisten in SAP BW //

Benutzerdefinierte Housekeepinglisten in SAP BW // Was wir vorhersagen, soll auch eintreffen! Benutzerdefinierte Housekeepinglisten in SAP BW // Stefan Rutte 1. Housekeepingliste anlegen Zum Anlegen der Housekeepingliste muss der Aufgaben-Manager mit der

Mehr

String Matching 2. Definition Ein Alphabet ist eine nichtleere, endliche Menge S von Zeichen.

String Matching 2. Definition Ein Alphabet ist eine nichtleere, endliche Menge S von Zeichen. 1 2 1. Strings Definition Ein Alphabet ist eine nichtleere, endliche Menge S von Zeichen. Ein String über S ist eine endliche Folge S = S(1)S(2)...S(n) von Zeichen S(i) aus S, dessen Länge n wir mit S

Mehr

Algorithmen & Programmierung. Felder (2) Zeichenketten

Algorithmen & Programmierung. Felder (2) Zeichenketten Algorithmen & Programmierung Felder (2) Zeenketten Zeenketten Verarbeitung von Textdaten in C In C gibt es keinen vordefinierten Datentyp zur Verarbeitung von Textdaten. Es existiert ledigl ein Datentyp

Mehr

Kapitel 5: Dynamisches Programmieren Gliederung

Kapitel 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

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung Ludwig-Maximilians-Universität München WS 2013/14 Institut für Informatik Übungsblatt 10 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung

Mehr

Sequenzen - Listen. Sequenzen Listen: Definition Listen: veränderliche Sequenzen Methoden Attribute Eine Liste von ganzen Zahlen

Sequenzen - Listen. Sequenzen Listen: Definition Listen: veränderliche Sequenzen Methoden Attribute Eine Liste von ganzen Zahlen Sequenzen - Listen Sequenzen Listen: Definition Listen: veränderliche Sequenzen Methoden Attribute Eine Liste von ganzen Zahlen Sequenzen Definition Eine Sequenz ist eine Datenstruktur, in der mehrere

Mehr

Primzahlen und Programmieren

Primzahlen und Programmieren Primzahlen Wir wollen heute gemeinsam einen (sehr grundlegenden) Zusammenhang zwischen Programmieren und Mathematik herstellen. Die Zeiten in denen Mathematiker nur mit Zettel und Stift (oder Tafel und

Mehr

Wann sind Codes eindeutig entschlüsselbar?

Wann sind Codes eindeutig entschlüsselbar? Wann sind Codes eindeutig entschlüsselbar? Definition Suffix Sei C ein Code. Ein Folge s {0, 1} heißt Suffix in C falls 1 c i, c j C : c i = c j s oder 2 c C und einen Suffix s in C: s = cs oder 3 c C

Mehr

2.7 Der Shannon-Fano-Elias Code

2.7 Der Shannon-Fano-Elias Code 2.7 Der Shannon-Fano-Elias Code Die Huffman-Codierung ist ein asymptotisch optimales Verfahren. Wir haben auch gesehen, dass sich die Huffman-Codierung gut berechnen und dann auch gut decodieren lassen.

Mehr

1. Übung zu "Numerik partieller Differentialgleichungen"

1. Übung zu Numerik partieller Differentialgleichungen 1. Übung zu "Numerik partieller Differentialgleichungen" Simon Gawlok, Eva Treiber Engineering Mathematics and Computing Lab 22. Oktober 2014 1 / 15 1 Organisatorisches 2 3 4 2 / 15 Organisatorisches Ort:

Mehr

Fragen 1. Muss eine DTM ein Wort zu Ende gelesen haben, um es zu akzeptieren? a) Ja! b) Nein!

Fragen 1. Muss eine DTM ein Wort zu Ende gelesen haben, um es zu akzeptieren? a) Ja! b) Nein! 4 Turingmaschinen Eingabeband nicht nur lesen, sondern auch schreiben kann und die zudem mit ihrem Lese-Schreib-Kopf (LSK) nach links und rechts gehen kann. Das Eingabeband ist zudem in beide Richtungen

Mehr

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren.

Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. Durch die Möglichkeit, Ein- und Ausgaben auf der Konsole durchzuführen, kann man auch systematisch das Verhalten von Klassen analysieren. 267 Das hier skizzierte Problem basiert auf der strategischen Entscheidung

Mehr

Übersicht Shell-Scripten

Übersicht Shell-Scripten !!!! Wichtig: Bei Shell-Scripten enden die Zeilen nicht mit einem Strichpunkt!!!! Erste Zeile eines Shell-Scripts: #! /bin/bash Variablen in Shell-Scripts: Variablennamen müssen mit einem Buchstaben beginnen,

Mehr

8.4 Suffixbäume. Anwendungen: Information Retrieval, Bioinformatik (Suche in Sequenzen) Veranschaulichung: DNA-Sequenzen

8.4 Suffixbäume. Anwendungen: Information Retrieval, Bioinformatik (Suche in Sequenzen) Veranschaulichung: DNA-Sequenzen 8.4 Suffixbäume Ziel: Datenstruktur, die effiziente Operationen auf (langen) Zeichenketten unterstützt: - Suche Teilzeichenkette (Substring) - Präfix - längste sich wiederholende Zeichenkette -... Anwendungen:

Mehr

Grundlagen der Informatik Vorlesungsskript

Grundlagen der Informatik Vorlesungsskript Grundlagen der Informatik Vorlesungsskript Prof. Dr. T. Gervens, Prof. Dr.-Ing. B. Lang, Prof. Dr. F.M. Thiesing, Prof. Dr.-Ing. C. Westerkamp 16 AUTOMATISCHES ÜBERSETZEN VON PROGRAMMEN MIT MAKE... 2 16.1

Mehr

Aufgabenblatt 2 Suchen und Sortieren. Aufgabe 1: Vergleiche und Sortieren in Java

Aufgabenblatt 2 Suchen und Sortieren. Aufgabe 1: Vergleiche und Sortieren in Java Aufgabenblatt 2 Suchen und Sortieren Abgabetermin: Samstag, 21.05.2016 23:55 Uhr Zur Prüfungszulassung müssen in einem Aufgabenblatt mind. 25% der Punkte erreicht werden und alle weiteren Aufgabenblätter

Mehr

Vorbereitende Aufgaben

Vorbereitende Aufgaben Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand, Marcel Preuß, Iman Kamehkhosh, Marc Bury, Diana Howey Übungsblatt

Mehr

06 While-Schleifen. While-Schleifen 1/7 Wiederholung: Schleifen

06 While-Schleifen. While-Schleifen 1/7 Wiederholung: Schleifen 06 While-Schleifen While-Schleifen 1/7 Wiederholung: Schleifen Eine Schleife ist eine Struktur, welche den Computer anweist, eine Liste von Befehlen mehrmals auszuführen. Falls Du ein Verfahren hast, das

Mehr

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs Grundlagen Felix Döring, Felix Wittwer 24. April 2017 Python-Kurs Gliederung 1. Über diesen Kurs 2. Der Python Interpreter 3. Python Scripte 4. Grundlagen der Sprache 5. Das erste Programm 6. Operatoren

Mehr

Selbststudium OOP6 & ALG Programmieren 1 - H1103 Felix Rohrer

Selbststudium OOP6 & ALG Programmieren 1 - H1103 Felix Rohrer Kapitel 5.2 1. zu bearbeitende Aufgabe: 5.1 5.1: done 2. Auf Seite 133 wird in der Methode start()ein while-loop verwendet. Kreieren Sie ein Code-Fragment mit derselben Funktionalität unter Verwendung

Mehr

Mathematische Rekursion

Mathematische Rekursion Rekursion Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die Funktion erscheint in ihrer eigenen Definition. Mathematische Rekursion o Viele mathematische

Mehr

Infovorkurs, Teil II: Theoretische Informatik. Motivation. Turing-Maschine. Programmiersprachen

Infovorkurs, Teil II: Theoretische Informatik. Motivation. Turing-Maschine. Programmiersprachen Infovorkurs, Teil 08.10.2015 Webseite Mittlerweile gibt es die Folien und die Übungen online. Außerdem die Ergebnisse der Umfrage! Ich empfehle auch die Links. www.geile-hirnbude.de/vorkurs Rückblick Haben

Mehr

Vorbereitende Aufgaben

Vorbereitende Aufgaben Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand Übungsblatt 4 Besprechung: 13. 17.11.2017 (KW 46) Vorbereitende

Mehr

Algorithmen zur exakten Suche in Texten

Algorithmen zur exakten Suche in Texten Kapitel 4 Algorithmen zur exakten Suche in Texten In diesem Kapitel wird ein Problem aus der Sequenzanalyse näher betrachtet, die exakte Textsuche: Gegeben ein Text und ein Muster, finde alle Vorkommen

Mehr

Algorithmen und Datenstrukturen

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

Mehr

Algorithmen und Datenstrukturen II

Algorithmen und Datenstrukturen II Algorithmen und Datenstrukturen II AG Praktische Informatik Technische Fakultät Vorlesung Sommer 2009 Teil I Algorithmen zur exakten Suche in Texten Die Klasse String Zeichenketten sind in Java Objekte.

Mehr

Die Warenkorbfunktion (workbasket)

Die Warenkorbfunktion (workbasket) Beschreibung der Komponente zur integration eines Warenkorbs in die Anwendung Table of contents 1 Allgemein...2 2 Körbe speichern und laden...3 3 Aufgelöstes XML oder beliebige weitere Metadaten im Korb...

Mehr

Textsuche. Textsuche

Textsuche. Textsuche Textsuche Stringologie Online-Algorithmen Peter Leupold Das allgemeine Problem der Text- oder Mustersuche besteht darin ein (Such-) Muster (pattern) x der Länge m in einem (Such-) Text (text) y der Länge

Mehr

4.4.1 Statisches perfektes Hashing. des Bildbereichs {0, 1,..., n 1} der Hashfunktionen und S U, S = m n, eine Menge von Schlüsseln.

4.4.1 Statisches perfektes Hashing. des Bildbereichs {0, 1,..., n 1} der Hashfunktionen und S U, S = m n, eine Menge von Schlüsseln. 4.4 Perfektes Hashing Das Ziel des perfekten Hashings ist es, für eine Schlüsselmenge eine Hashfunktion zu finden, so dass keine Kollisionen auftreten. Die Größe der Hashtabelle soll dabei natürlich möglichst

Mehr

(3) Button-Klick & Texteingabe

(3) Button-Klick & Texteingabe Nachdem ihr jetzt Buttons und ein Eingabefeld hinzugefügt habt, wollt ihr sie sicherlich auch benutzen können und festlegen, was bei einem Klick oder Eintrag passieren soll! Dazu taucht ihr nun in die

Mehr

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe Ludwig-Maximilians-Universität München München, 04.12.2009 Institut für Informatik Prof. Dr. Christian Böhm Annahita Oswald, Bianca Wackersreuther Einführung in die Programmierung WS 2009/10 Übungsblatt

Mehr

WiMa-Praktikum 1. Woche 8

WiMa-Praktikum 1. Woche 8 WiMa-Praktikum 1 Universität Ulm, Sommersemester 2017 Woche 8 Lernziele In diesem Praktikum sollen Sie üben und lernen: Besonderheiten der For-Schleife in Matlab Wiederholung des Umgangs mit Matrizen und

Mehr

12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete.

12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete. Worst-case Zeit für Search: Θ(n). In der Praxis jedoch sehr gut. Unter gewissen

Mehr

Frilo.Manager. Erstellt am 19. Februar 2011 Letzte Änderung am 11. Mai 2011 Version Seite 1 von 8

Frilo.Manager. Erstellt am 19. Februar 2011 Letzte Änderung am 11. Mai 2011 Version Seite 1 von 8 Speichern und Verwalten Ihrer Frilo-Positionen Einfügen von externen Dokumenten wie Word, Excel oder sonstige PDF- Dateien Paralleles Bearbeiten mehrerer Dokumente Erstellen eines Gesamtdokuments auf PDF-Basis

Mehr

Institut für Programmierung und Reaktive Systeme 24. Juni Programmieren II. 14. Übungsblatt

Institut für Programmierung und Reaktive Systeme 24. Juni Programmieren II. 14. Übungsblatt Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 2. Juni 2016 Programmieren II 1. Übungsblatt Hinweis: Auf diesem Übungsblatt finden Sie die fünfte,

Mehr

13. Hashing. AVL-Bäume: Frage: Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n)

13. Hashing. AVL-Bäume: Frage: Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n) AVL-Bäume: Ausgabe aller Elemente in O(n) Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n) Frage: Kann man Einfügen, Löschen und Suchen in O(1) Zeit? 1 Hashing einfache Methode

Mehr

Kapitel 1: Informationsverarbeitung durch Programme

Kapitel 1: Informationsverarbeitung durch Programme LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2009 Kapitel 1: Informationsverarbeitung

Mehr

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung 2 Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung 2 Woche: Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung 24/ 44 Zwei Beispiele a 0

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & 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

Mehr

JSP Übung. JEE Vorlesung Teil 7. Ralf Gitzel

JSP Übung. JEE Vorlesung Teil 7. Ralf Gitzel JSP Übung JEE Vorlesung Teil 7 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Einführung: Aufgaben teilweise zusammengelegt Besprechung der Einzelaufgaben

Mehr

Aufgabe 3: Erste Versuche im Indexieren des Templates. Ulf Leser Wissensmanagement in der Bioinformatik

Aufgabe 3: Erste Versuche im Indexieren des Templates. Ulf Leser Wissensmanagement in der Bioinformatik Aufgabe 3: Erste Versuche im Indexieren des Templates Ulf Leser Wissensmanagement in der Bioinformatik q-gram Index Ein q-gram Index für einen String T ist ein invertiertes File über allen q-grammen von

Mehr

Frilo.Document.Designer

Frilo.Document.Designer Erstellt am 19. Februar 2011 Letzte Änderung am 10. Juni 2011 Version 4.2011.1.2 Seite 1 von 8 Inhalt 1 Erste Schritte...4 1.1 Arbeiten in der Verwaltung FCC und Erstellen eines Dokumentes...4 1.2 Erstellen

Mehr

Zeichenketten. Hauptseminar Hallo Welt! für Fortgeschrittene. SS 2006 10. Mai 2006 Tobias Hager. Tobias.Hager@e-technik.stud.uni-erlangen.

Zeichenketten. Hauptseminar Hallo Welt! für Fortgeschrittene. SS 2006 10. Mai 2006 Tobias Hager. Tobias.Hager@e-technik.stud.uni-erlangen. Zeichenketten Hauptseminar Hallo Welt! für Fortgeschrittene SS 2006 10. Mai 2006 Tobias.Hager@e-technik.stud.uni-erlangen.de Friedrich-Alexander Universität Erlangen-Nürnberg Gliederung 2 1. Motivation

Mehr

Algorithmen auf Sequenzen Vorbereitung zur Prüfung

Algorithmen auf Sequenzen Vorbereitung zur Prüfung Algorithmen auf Sequenzen Vorbereitung zur Prüfung Dominik Kopczynski Lehrstuhl für Algorithm Engineering (LS11) Fakultät für Informatik TU Dortmund Überblick Zusammenfassung aller Themen Fragen, die in

Mehr