Sie sind auf Seite 1von 22

JAKOB

BENZ

DATENSTRUKTUREN UND ALGORITHMEN


PRFUNGSVORBEREITUNG

Basierend auf dem Skript von Prof. Dr. Lars Grunske im


Sommersemester 2014 Universitt Stuttgart
Jakob Benz | 2014

Datenstrukturen und Algorithmen


Zusammenfassung fr die Prfung

Inhalt
01 GRUNDLEGENDES & LISTEN (SUCHEN UND IMPLEMENTIERUNGEN) ...................................................... - 2 02 LISTEN UND SORTIEREN ................................................................................................................... - 3 03 EINIGE SORTIERVERFAHREN IM BERBLICK ........................................................................................ - 4 04 KOMPLEXITT ................................................................................................................................. - 6 05 BUME ........................................................................................................................................... - 7 06 GRAPHEN (GRUNDLEGENDES) ........................................................................................................ - 12 07 STRING MATCHING ....................................................................................................................... - 17 08 HASHING ...................................................................................................................................... - 19 09 VERTEILTE ALGORITHMEN & PETRINETZE ......................................................................................... - 21 -

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 1 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

01 GRUNDLEGENDES & LISTEN (SUCHEN UND IMPLEMENTIERUNGEN)


DATENSTRUKTUR (DEFINITION)
Eine Datenstruktur ist eine bestimmte Art, Daten zu verwalten und miteinander zu
verknpfen, um in geeigneter Weise auf diese zugreifen zu knnen und diese
manipulieren zu knnen. Datenstrukturen sind immer mit bestimmten Operationen
verknpft, um eben diese Daten manipulieren zu knnen.

ALGORITHMUS (DEFINITION)
Ein Algorithmus ist eine Beschreibung eines allgemeinen Verfahrens. Przise, endlich
und aus elementaren Verarbeitungsschritten.

SUCHEN IN SORTIERTEN FOLGEN

Sequenzielle Suche
Best Case
Worst Case
Average Case (successful)

Anzahl der Vergleiche


1
n
+1
2

Average Case (not successful)

Binre Suche
Best Case
Worst Case
Average Case (successful)
Average Case (not successful)

Anzahl der Vergleiche


1
log2 n
log2 n
log2 n

Bei der binren Suche muss die Folge sortiert sein. Fr groe n wchst der Aufwand bei
der sequentiellen Suche linear, whrend der Aufwand bei der binren Suche
logarithmisch wchst. Deshalb ist die binre Suche fr groe Folgen deutlich effizienter.
Bei sehr kleinen Folgen kann die sequentielle Suche allerdings deutlich effizienter sein.

LISTENIMPLEMENTIERUNGEN ARRAY VS. LINKED LIST

Array:

Linked List:

schneller wahlfreier Zugriff auf beliebige Elemente, aber


Grenanpassung an tatschlichen Speicherbedarf sehr aufwndig.
Effiziente Neuanordnung von Elementen.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 2 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

02 LISTEN UND SORTIEREN


STACK
LIFO-Prinzip. Push() pop() top().

QUEUE
FIFO-Prinzip. Enqueue() dequeue() front().

KOMPLEXITT LINKED LIST VS. DOUBLY LINKED LIST


Linked List
Operation
Komplexitt
addFirst()
O(1)
getFirst()
O(1)
removeFirst()
O(1)
addLast()
O(n)
getLast()
O(n)
removeLast()
O(n)

Doubly Linked List


Operation
Komplexitt
addFirst()
O(1)
getFirst()
O(1)
removeFirst()
O(1)
addLast()
O(1)
getLast()
O(1)
removeLast()
O(1)

ITERATOR
Methoden: hasNext() next() remove().

COLLECTIONS & MAPS


Lists und Sets sind Collections, HashMaps und TreeMaps etc. sind natrlich Maps.

STABILE SORTIERVERFAHREN
Ein Sortierverfahren heit stabil, wenn es die relative Reihenfolge gleicher Schlssel
beibehlt.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 3 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

03 EINIGE SORTIERVERFAHREN IM BERBLICK


BERBLICK DER KOMPLEXITTEN (IM HINBLICK AUF VERGLEICHSOPERATIONEN)
Selection

Insertion

Bubble

Merge

Quick

Best Case

Average Case

( )

( )

Worst Case
Stabil ?

Instabil

Stabil

Stabil

Stabil

Instabil

WICHTIGE DETAILS ZU DEN SORTIERVEFAHREN

Selection Sort
In jedem Durchlauf wird das jeweils grte / kleinste Element nach rechts / links
gesetzt und mit der jeweils um 1 kleineren Listen fortgefahren.
Insertion Sort
Fange mit dem 1. Element der Liste eine neue Liste an. Sortiere danach die noch
brigen Elemente in die neue Liste ein (brige Elemente werden solange nach
links verschoben, bis diese an der korrekten Position sind).
Bubble Sort
Elemente werden paarweise verglichen und das grte Element automatisch ans
Ende verschoben.
Merge Sort
Fr groe Listen von Vorteil, da out-of-place. Listen werden geteilt und rekursiv
sortiert, also wieder geteilt bis sie nur noch ein Element enthalten, danach
werden diese wieder zusammengefgt zu einer einzigen sortierten Liste. Dazu
wird das jeweils kleinste Element der beiden zusammenzufgenden Listen
betrachtet und das jeweils kleinere ans Ende der sortierten Liste geschoben.
Quick Sort
Ebenfalls rekursive Aufteilung der Liste. Allerdings in-Place, da Aufteilung durch
ein Pivot-Element. Alle Elemente links des Pivot-Elements sind kleiner, alle rechts
davon sind grer.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 4 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

JAVA COLLECTIONS FRAMEWORK


Das JCF stellt wichtige Collections wie Listen, Mengen und Maps in unterschiedlichen
Implementierungen bereit. Auerdem wird auch ein Iterator fr die jeweilige Collection
mitgeliefert.

JAVA GENERICS
Der Typ der Elemente einer Collection kann festgelegt werden hohe Typsicherheit.
Das geht auch bei Iteratoren.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 5 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

04 KOMPLEXITT
KOMPLEXITT VON IF-ELSE-STATEMENTS
Laufzeit = Aufwand fr Test der Bedingung + max(Anweisung 1, Anweisung2)

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 6 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

05 BUME
BAUM (DEFINITION)
Ein besteht aus einer Menge von Knoten und Kanten. Jeder Knoten auer der Wurzel ist
mit genau einer Kante mit seinem Elternknoten verbunden. Alle Knoten bis auf die
Wurzel und die Blattknoten heien innere Knoten. Das Niveau startet bei 0 (Wurzel).

BINRBAUM
Ein Baum, dessen Knoten hchstens 2 Kinder haben, heit Binrbaum. Ein Binrbaum
heit voll, wenn alle Knoten entweder 0 oder 2 Kinder haben. Ein voller Binrbaum
heit vollstndig, wenn alle Bltter auf demselben Niveau liegen.

BINARISIERUNG VON BUMEN


Jeder geordnete Baum lsst sich eindeutig in einen Binrbaum berfhren. Hat ein
Knoten dabei mehr als 2 Kindknoten, so zeigt der linke Zeiger auf den ersten Kindknoten
und der rechte Zeiger dieses ersten Kindknotens auf den nchsten Geschwisterknoten.

REKURSIV VS. ITERATIV


Rekursive Algorithmen lassen sich immer auch iterativ formulieren. Iterative
Formulierungen sind oft einfacher und effizienter zu implementieren. Die
Transformation in einen iterativen Algorithmus erfordert eigentlich immer einen Stack,
auer man hat eine Endrekursion, die man durch eine Schleife ersetzen kann.

LSCHEN VON KONTEN IN EINEM BINRBAUM


Trivial, wenn der zu lschende Knoten ein Blatt ist, oder nur einen Kindknoten hat. Hat
der zu lschende Knoten 2 Kindknoten, muss er durch seinen Inorder-Nachfolger ersetzt
werden. Dadurch kann der Baum allerdings leicht entarten, deshalb zuflliger Wechsel
mit Inorder-Vorgnger in der Praxis. ).

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 7 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

AVL-BAUM
AVL-Balance := Hlinker Teilbaum Hrechter Teilbaum
Diese Balance muss immer -1, 0, 1} sein.

ROTATIONEN ZUR REBALANCIERUNG

KOMPLEXITT EINES AVL-BAUMS


O(log(n

fr das Einfgen, Suchen und Lschen von Knoten.

2-3-4 BAUM

2-Knoten mit 1 Schlssel und 2 Nachfolgern


3-Knoten mit 2 Schlssel und 3 Nachfolgern
4-Knoten mit 3 Schlssel und 4 Nachfolgern

EINFGEN IN EINEN 2-3-4 BAUM


Problemlos auer bei 4-Knoten. Entweder

Bottom-Up:
Top-Down:

erst einfgen, dann splitten bis hin zur Wurzel


alle 4-Knoten vorsorglich splitten, dann einfgen

Bei einem Split wird der mittlere Schlssel nach oben gezogen.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 8 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

ROT-SCHWARZ-BAUM
1.
2.
3.
4.

Jeder Knoten ist entweder schwarz oder rot.


Alle Blattknoten sind schwarz.
Die Kinder und Eltern jedes roten Knotens sind schwarz.
Fr jeden Knoten gilt die Schwarztiefe (jeder Pfad zu einem Blatt hat die gleiche
Anzahl an schwarzen Knoten).

3-Knoten und 4-Knoten eines 2-3-4 Baums werden durch kleine Binrbume reprsentiert.

LSCHEN VON KONTEN IN EINEM ROT-SCHWARZ-BAUM


Knoten entfernen und Baum wieder ausgleichen mit Rotationen und eventuellen
Umfrbungen.

NACHTEILE VON 2-3-4BUMEN UND ROT-SCHWARZ-BUMEN


Zwar effizientes Suchen / Einfgen / Lschen, jedoch was den Speicherbedarf anbelangt
nicht optimal, da viele kleine Datenblcke geschrieben werden mssen, vor allem beim
Suchen / Einfgen / Lschen.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 9 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

B-BAUM
B-Bume sind Mehrwegbume, d.h. ein Knoten kann mehrere Elemente speichern. Ein
Mehrwegbaum ist vllig ausgeglichen, wenn

alle Wege von der Wurzel bis zu den Blttern gleich lang sind
jeder Knoten gleich viele Elemente speichert.

Diese Kriterien einzuhalten, wre aber sehr / zu aufwendig. Deshalb gilt fr einen B-Baum
folgenden Kriterium:
Jeder Knoten auer der Wurzel hat zwischen m und 2m Elemente.
Jeder Knoten ist entweder ein Blatt oder hat i+1 Nachfolger (i Anzahl Elemente im Knoten).
B-Bume wachsen / schrumpfen an der Wurzel, da Elemente beim Einfgen / Lschen
eventuell nach oben gezogen werden mssen.
B-Bume sind vor allem fr groe Datenbestnde in Datenbank oder Dateisystemen beliebt,
da in einem B-Baum die Anzahl der zu lesende Knoten auf der Suche nach einem Element
gering ist.

TRIE

Probleme bei Tries:


lange gemeinsame Teilworte
fast leere Knoten
nicht vorhandene Buchstaben und Buchstabenkombinationen
Allgemein sehr unausgeglichene Bume.

PATRICIA-BAUM (PRACTICAL ALGORITHM TO RETRIEVE INFORMATION CODED IN ALPHANUMERIC)


Teilworte werden
bersprungen

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 10 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

PRFIXBAUM

In den Knoten werden Teilwort und Lnge des zu berspringenden Wortteils sowie das fr
die Verzweigung zu testendes Zeichen gespeichert.

DIGITAL- UND PRFIXBUME - ZUSAMMENFASSUNG


Diese Bume sind nur bei Gleichverteilung relativ ausgeglichen, was nur uerst selten
der Fall sein drfte. Diese Bume haben eine feste Verzweigung unabhngig von den
gespeicherten Elementen.
Zum Einsatz kommen solche Bume insbesondere bei Information Retrieval,
Suchmaschinen und Bitfolgen.

HEAPS
Ein Heap ist eine Art Suchbaum, jedoch kein richtiger. Die Kinder eines Knotens sind
immer kleiner / grer als der Knoten selbst. Sie sind also fr Priorittswarteschlangen
geeignet. Ein Heap ist vollstndig, d.h. die Blattebene ist von links nach rechts gefllt.
Heaps werden meistens in Arrays gespeichert. Beim Herstellen der Heapeigenschaft
mssen nur die ersten n/2 Elemente von hinten her betrachtet werden.
Die Kindknoten sind immer an den Positionen 2i und 2i+1.

HEAPSORT
Bestehend eigentlich aus 2 Teilen:

Herstellen des Heaps (der Heapeigenschaft)


Entfernen der Elemente zur eigentlichen Sortierung

Komplexitt: n log (n in allen Fllen.

SETS MIT BINREN SUCHBUMEN


Wichtigste Methoden: add / unite / intersect. Die contains-Methode ist in
binren Suchbumen sehr effizient. Die unite-Methode legt zuerst ein neues Set an und
fgt die Elemente der beiden anderen Sets ber die add-Methode hinzu, so werden
auch keine Duplikate angelegt, da dies von der add-Methode direkt berprft wird.
Basierend auf dem Skript von Prof. Dr. Lars Grunske
SS 14 | Uni Stuttgart

Seite - 11 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

06 GRAPHEN (GRUNDLEGENDES)
ARTEN VON GRAPHEN

Ungerichteter Graph (keine Schleifen von Knoten zu sich selbst)


Gerichteter Graph (Schleifen von Knoten zu sich selbst erlaubt)
Gewichteter Graph (gerichtet oder ungerichtet, Kanten haben Gewichte)

WICHTIGE BEGRIFFE ZU GRAPHEN

Symmetrischer Graph
Ein gerichteter Graph ist symmetrisch, wenn zu jeder Kante auch die
entgegengesetzte Kante existiert.
Pfad
Eine Folge von unterschiedlichen Knoten, die durch Kanten verbunden sind.
Zyklus
Ein Pfad, in dem Knoten mehrmals vorkommen.

DATENSTRUKTUREN FR GRAPHEN
Die naheliegende Umsetzung mit einer Knotenklasse und Kanten ist allerdings
vergleichsweise aufwendig und birgt viele Fehlermglichkeiten.
Effizientere Graphenreprsentationen sind:
Kantenliste

Knotenliste

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 12 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

Adjazenzmatrix
Bei ungerichteten Graphen ist Adjazenzmatrix symmetrisch, eine Dreiecksmatrix
reicht also aus.

Adjazenzliste

WEITERE WICHTIGE BEGRIFFE UND DEFINITIONEN ZU GRAPHEN

Weg
Folge von (unterschiedlichen) Knoten, die durch (unterschiedliche) Kanten
verbunden sind.
Erreichbar - Unerreichbar
Existiert ein Weg von einem Knoten zu einem anderen, so ist dieser andere
Knoten von ersterem Knoten erreichbar, anderenfalls unerreichbar.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 13 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

Verbunden
2 Knoten sind verbunden, wenn der erreichbar von dem anderen ist.
Doppelpunktfreier / einfacher Weg
Ein Weg heit doppelpunktfrei / einfach, wenn alle Knoten auf dem Weg
unterschiedlich sind.
Geschlossener Weg
Ein Weg heit geschlossen, wenn Start- und Zielknoten identisch sind.
Zyklus
Ein Weg heit Zyklus, wenn er doppelpunktfrei und geschossen ist.
Azyklischer Graph
Ein Graph heit azyklisch / zyklenfrei, wenn er keine Zyklen enthlt.
Zusammenhngender Graph
Ein Graph heit zusammenhngend, wenn jeder Knoten mit jedem anderen
Knoten verbunden ist (von jedem anderen Knoten erreichbar ist).
Grad
Der Grad eines Knotens ist Anzahl seiner ausgehenden Kanten.
Eulerscher Weg
Ein Weg heit eulersch, wenn jede Kante genau einmal in seinem Pfad
vorkommt. Haben in einem Graphen genau 2 Knoten einen ungeraden Grad, so
hat dieser Graph einen Eulerschen Weg, aber keinen Eulerschen Kreis.
Eulerscher Kreis
Ein Eulerscher Weg heit Eulerscher Kreis, wenn er geschlossen ist. Ein
zusammenhngender ungerichteter Graph besitzt genau dann einen Eulerschen
Kreis, wenn alle seine Knoten einen geraden Grad haben.
Hamiltonscher Weg
Ein Weg heit Hamiltonscher Weg, wenn er jeden Knoten genau einmal enthlt.
Hamiltonscher Kreis
Ein Hamiltonscher Weg heit Hamiltonscher Kreis, wenn er geschlossen ist.

BREITENSUCHE
Bestimme einen Startknoten, untersuche diesen, untersuche alle Nachfolger, fahre
rekursiv fort (analog zur Levelorder-Traversierung in binren Suchbumen). Das
Ergebnis ist ein aufspannender Baum mit dem Startknoten als Wurzel. Als
Zwischenspeicher in der Implementierung wird eine Queue eingesetzt.

TIEFENSUCHE
Bestimme den Startknoten, speichere alle noch nicht erschlossenen Nachfolger in einem
Stack, rufe rekursiv fr jeden Knoten im Stack die Tiefensuche auf. Falls es keine nicht
erschossenen Nachfolger mehr gibt, lsche den obersten Knoten im Stack und rufe fr
den nchsten Knoten die Tiefensuche auf. Pro Knoten wird der Beginn und das Ende der

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 14 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

Bearbeitungszeit berechnet und gespeichert. Die Tiefensuche ermglicht


Kantenunterscheidung bei mehreren aufspannenden Bumen.
Die Tiefensuche kann auch fr den Test auf Zyklenfreiheit verwendet werden.

TOPOLOGISCHES SORTIEREN
Die topologische Sortierung sortiert nicht nach einer totalen Ordnung, sondern eher
nach Nachbarschaft. Bei der topologischen Sortierung wird ein azyklischer gerichteter
Graph daraufhin untersucht, ob es eine Reihenfolge der Knoten gibt, sodass jeder
Knoten nach all seinen Vorgngern kommt, es also keine Back-Edges gibt.

DIJKSTRA-ALGORITHMUS
Der Dijkstra-Algorithmus berechnet den krzesten Pfad von einem Startknoten zu allen
anderen Knoten.
Greedy-Algorithmus
Folge immer der Kante, die den krzesten Streckenabschnitt vom Startknoten
aus verspricht
Nur fr Graphen mit nicht negativen Kantengewichten
Berechnet iterativ verfeinernd die Distanzwerte
Als Hilfe wird eine Heap zum Auslesen des jeweils minimalen Elements
verwendet
Anwendung: z.B. zur Wegfindung in Computerspielen

A*-ALGORITHMUS

Verwendet Heuristik (z.B. Luftlinie)


Openlist: alle Knoten, die schon besuchten wurden, zu welchen aber noch nicht
zwingend der krzeste Weg bekannt sein muss. Aus dieser Liste (meist als Heap
gespeichert) wird immer der Knoten mit dem krzesten Weg zur
Weiterverarbeitung entnommen.
Closedlist: alle Knoten, zu denen der krzeste Weg bereits bekannt ist.

BELLMAN-FORD-ALGORITHMUS

Findet auch krzeste Wege in Graphen mit negativen Kantengewichten


Bestimme jeweils beste bisher mgliche um eine Kante lngere Verbindung.
In der i-ten Iteration werden Wege mit der Lnge i bercksichtigt.
Ergebnis ist nach |V|-1 Iterationen stabil.
Ist das Ergebnis nach |V|-1 Iterationen nicht stabil, sind negative Zyklen
vorhanden.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 15 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

KRUSKAL-ALGORITHMUS
Berechnet den minimalen Spannbaum eines Graphen. Fge solange immer die kleinste
Kante hinzu, sodass keine Zyklen entstehen.

FORD-FULKERSON-ALGORITHMUS
Berechnet den maximalen Fluss in einem Graphen.

Das Restnetzwerk gibt auf den normalen Kanten den noch verbleibenden Fluss an. Auf
den Rckkanten ist der Fluss vermerkt, der aktuell fliet.

Im Gesamtflussnetzwerk wird auf den normalen Kanten angegeben, wie viel Fluss von
dem verfgbaren Fluss tatschlich fliet.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 16 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

07 STRING MATCHING
BRUTE-FORCE-ALGORITHMUS
1. Muster von links nach rechts verschieben und jeweils bereinanderliegende
Zeichen vergleichen
2. Bei Mismatch Muster um eins nach rechts verschieben
3. Abbruch bei kompletten Match

KNUTH-MORRIS-PRATT-ALGORITHMUS

Vergleiche zu Beginn wie beim Brute-Force-Algorithmus die


bereinanderliegenden Zeichen
Bei Mismatch: schiebe das Muster ausgehend von der Position des Mismatches
um f[x-1] zurck (x = Position des Mismatches im Muster).
Wiederhole die ersten beiden Schritte bis das Muster gefunden wird oder der
Text aus ist und das Muster nicht gefunden wurde.

Prfixtabelle:

Komplexitt:
O(m + n): O(m) fr die Musteranalyse und O(n) fr die eigentliche Suche
Platzbedarf:
O(m)

BOYER-MOORE-ALGORITHMUS
Beim Boyer-Moore-Algorithmus wird nicht wie sonst von vorner her verglichen, sondern
vom Ende des Musters her. Der Boyer-Moore-Algorithmus verwendet 2 Heuristiken, um
die Suche effizienter zu machen:
1. Bad-Character-Heuristik
Tritt bei einem Mismatch das Zeichen, das den Mismatch verursacht, nicht
im Muster auf, so wird das Muster bis an die Position hinter dem Zeichen
verschoben, das den Mismatch verursacht hat.
Kommt das Zeichen im Text, das dem Mismatch verursacht hat, im Muster
vor, so wird das Muster bis zum letzten Vorkommen dieses Zeichens im
Muster nach rechts verschoben.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 17 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

2. Good-Suffix-Heuristik
Tritt beim Vergleichen von hinten her ein Mismatch auf, kann das Muster um
shift[x] (x = Index (von vorne und von 0) des Mismatch-Zeichens im Muster) nach
rechts verschoben.
Es kann sein, dass die Bad-Character-Heuristik eine Verschiebung nach links vorschlgt.
Im Allgemeinen nimmt man immer die grere mgliche Verschiebedistanz.

Komplexitt:
O(m + ) (wenn nur der Index des ersten Zeichens gesucht wird), sonst O(m ).
Bei einem relativ groen Alphabet und einem relativ kleinen Muster ist die
Average-Case-Laufzeit O( ).

REGULRE AUSDRCKE
Wichtige Notationen:
.
beliebiger Buchstabe (Wildcard)
a|b a oder b
a*
beliebige Anzahl an as
a+
beliebige Anzahl an as > 0 (mindestens 1)
a?
genau 0 oder 1 a
[abc] irgendein Zeichen der Aufzhlung
^
Zeilenbeginn
$
Zeilenende

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 18 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

08 HASHING
SURJEKTIVITT
Jedes Element der Zielmenge wird mindestens einmal belegt, sodass kein Platz
verschwendet wird.

GLEICHVERTEILTHEIT
Jedes Element der Zielmenge wird ungefhr gleich oft belegt.

DIVISIONSVERFAHREN

Objektschlssel s
Array der Gre p
H(s) = s mod p

MULTIPLIKATIONSVERFAHREN

Objektschlssel s
Zahl z mit 0 < z < 1 (mglichst irrational)
Array der Gre p
Nimm nur den Nachkommateil von s*z und multipliziere mit p und runde ab

WICHTIGES ZU DER WAHL DER EINZELNEN PARAMETER

p mglichst hohe Primzahl nicht zu nahe bei 2n


z irrational

KOLLISIONSSTRATEIEN

Offenes Hashing:
Liste oder Suchbaum an den Eintrag im eigentlichen Array anhngen. Bei schlecht
gewhlter Hashfunktion kann die Laufzeit linear werden.
Geschlossenes Hashing mit Sondieren:
Primrkollision (Wert mit gleichem Hashwert bereits in der Tabelle) oder
Sekundrkollision (Platz belegt, weil Wert aufgrund von frherer Kollision bereits
in der Tabelle).
Lineares Sondieren:
Verschieben um Konstante c (am besten ggT(c, p) = 1). Beim Lschen
werden deleted-flags verwendet. Beim Einfgen, Stellen mit deleted =
true wie freie Stellen behandeln und beim Suchen Stellen mit deleted =
true wie belegte Stellen behandeln (aber nicht bei der Ausgabe des

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 19 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

Suchresultats). Da hierbei schnell Cluster entstehen knnen (vor allem


durch Sekundrkollision) gibt es auch das quadratische Sondieren.
G(s, i) = (h(s)+i*c) mod p
Quadratisches Sondieren:
Bei Kollision immer i2 Schritte ausgehend von dem Index der Kollision
gehen, bis freie Position gefunden wurde. Lschen sehr kompliziert und
nur mit deleted-flags mglich.
G(s, i) = (h(s)+i2) mod p
Reduziert Sekundrkollision und damit Clusterbildung.

KOMPLEXITT
Offenes Hashing mit berlaufliste bei geringer Kollisionswahrscheinlichkeit: Suchen und
Einfgen in O(1).

REHASHING
Tabelle wird vergrert und jedes Element neu eingefgt.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 20 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!

09 VERTEILTE ALGORITHMEN & PETRINETZE


PETRINETZE (WICHTIGES)
Eine Kante bewegt immer genau so viele Tokens wie in ihrer Beschriftung vermerkt sind.
Transitionen knnen Tokens vermehren und vermindern (z.B. bei Split oder
Vereinigung). Eine Transition kann schalten, wenn jede Eingabemarke mindestens 1
Token enthlt.

MONITOR
Garantiert wechselseitigen Ausschluss durch Synchronisation. Wenn z.B. mehrere
Prozesse auf gemeinsame Variablen zugreifen und diese manipulieren wollen,
verhindert ein Monitor (in Java Schlsselwort synchronized), dass mehrere Prozesse
gleichzeitig auf diese Variablen zugreifen knnen. Sowohl Variablen als auch Methoden
knnen in Java als synchronized gekennzeichnet werden. Kritische Abschnitt im
Quellcode werden somit geschtzt.

SEMAPHOR
Regelt den Zugriff von Prozessen auf gemeinsame Ressourcen (z.B. Rechenleistung).
Dazu wird ein Counter und eine Priority-Queue verwendet. Vor Zugriff auf Ressource
wird die Ressource reserviert (Zhler 1). Wenn Zhler = 0, Prozess in Priority-Queue
einfgen. Nach Zugriff auf Ressource Zhler + 1.

Basierend auf dem Skript von Prof. Dr. Lars Grunske


SS 14 | Uni Stuttgart

Seite - 21 -

Jakob Benz | 2014


Kein Anspruch auf Korrektheit und Vollstndigkeit!