Algorithmen Und Datenstrukturen SS07
Transcript of Algorithmen Und Datenstrukturen SS07
1
2
Inhaltsberblick0. EinfhrungProgrammstrukturen
Vorlesung
1. AlgorithmenParadigmen, Analyse
Algorithmen und Datenstrukturen (PI.ADS.AD.VO)3 Stunden / 4 ECTS Punkte
2. DatenstrukturenAllgemeiner berblick
3. ListenLineare Speicherstrukturen, Stack, Queue
Ao. Univ.-Prof. Dipl.-Ing. Dr. Erich SchikutaInstitut fr Knowledge and Business Engineering Fakultt fr Informatik, Universitt Wien SS 2007VO Algorithmen und Datenstrukturen E. Schikuta
4. BumeSuchstrukturen
5. VektorenSortieren, Hashing
6. GraphenTraversierungs- und OptimierungsalgorithmenVO Algorithmen und Datenstrukturen E. Schikuta
3
4
LiteraturR. Sedgewick, Algorithmen in C++ (Teil 1-4), Addison Wesley, 3. berarbeitete Auflage, 2002 Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest, Introduction to Algorithms, published by MIT Press and McGraw-Hill. (First published in 1990.) Jim Gray, Vortrag: Parallel Database Systems Analyzing LOTS of Data, Microsoft Research, 1997 E. Schikuta, Folien zur Vorlesung, Algorithmen und Datenstrukturen 1, SS 2006
Danksagung Fr Mitarbeit und Durchsicht der Folien geht mein besonderer Dank an Helmut Wanek, Clemens Bruckmann und Martin Polaschek Mein weiterer Dank geht an zahlreiche Studierende der letzten Jahre, die im Rahmen ihrer bungen die Basis fr einige der dynamischen Beispiele der VO lieferten.
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
5
6
0.1 Was ist Informatik ?
Kapitel 0:
Die Wissenschaft der Informatik umfasst alle Modelle (Methoden, Verfahren, Konzepte, etc.), die dazu dienen eine gegebene Eingabe in eine beliebige Ausgabe zu verwandeln
Einfhrung
Input
Informatik
Output
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
7
8
Modelle der Informatik
Beispiele fr Modelle Kochrezept als Folge von Anweisungen
Modelle derInput
Computerprogramm Spielregeln
Bedienungsanleitung Informatik Kochrezept
Output ...
Informatik
Amerikanischer Wildreis 1 Tasse ergibt 3 Portionen Reis grndlich waschen 1 Tasse Reis in 3 Tassen kochendes Wasser geben kurz aufkochen lassen bei schwacher Hitze 25 min bedeckt dnsten Reis abdecken, salzen, mit Gabel auflockern restliche Flssigkeit verdampfen
Beschreibung von Ursache-WirkungsZusammenhngenWeies Licht erhlt man, wenn man rotes, grnes und blaues Licht mischtVO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
9
10
0.2 Algorithmus Unter Algorithmus versteht man die schrittweise Vorschrift zur Berechnung gesuchter aus gegebenen Gren, in der jeder Schritt aus einer Anzahl eindeutig ausfhrbarer Operationen und einer Angabe ber den nchsten Schritt besteht. UrsprungAlgorithmus Berechnungsvorschrift Ben Musa Al-Chwarizmi (usbekischer Mathematiker um 825), erstes Buch ber Algebra arithmos ... griechisches Wort fr ZahlVO Algorithmen und Datenstrukturen E. Schikuta
Algorithmus - Eigenschaften (1)Eingangswerte/AusgabewerteEW sind vor, AW nach der Ausfhrung bekannt
EindeutigkeitJeder Schritt der Ausfhrung mu eindeutig sein, keine Mehrdeutigkeiten mglich
EndlichkeitStatisch: mit endlich vielen Zeichen formulierbar Dynamisch: in endlich vielen Schritten beendbar
Vollstndigkeitsollte vollstndig sein, sollte alle mglichen Flle behandeln
Korrektheitsollte das gewnschte Ergebnis liefern
Granularitt der OperationenSpezifikationsgenauigkeit der einzelnen BeschreibungselementeVO Algorithmen und Datenstrukturen E. Schikuta
11
12
Paradigmen und DarstellungParadigma ... Das, was den Mitgliedern einer wissenschaftlichen Gemeinschaft gemeinsam ist ... eine Konstellation von Meinungen, Wertungen und Methoden... (Thomas Kuhn 1976)
Das logikbasierte Paradigmaein Programm besteht aus Regeln und FaktenWenn es regnet, nehme ich den Schirm. Wenn ich zerstreut bin, vergesse ich den Schirm unterwegs. Wenn ich zerstreut bin, gre ich Bekannte nicht. Wenn ich nicht zerstreut bin, gre ich Bekannte. Regeln Wenn es regnet und ich meinen Schirm unterwegs vergesse, werde ich nass. Wenn es schwl ist, bin ich zerstreut. Es ist schwl. Fakten Es regnet. Anfrage: werde ich nass? Antwort: ja. Ableitbare Fakten: Ich nehme den Schirm. Ich bin zerstreut. Ich vergesse den Schirm unterwegs. Ich werde nass. Ich gre Bekannte nicht.
Algorithmen knnen auf ganz unterschiedliche Art konzipiert werden (Paradigmen): prozedural versus funktional versus logik-basiert orthogonal dazu objektorientiert (OO) auf eine bestimmte Art konzipierte Algorithmen knnen auf ganz unterschiedliche Art ausgedrckt werden (Darstellung): natrlichsprachlich, in einer Programmiersprache,
ein Problem: Widersprche zwischen den RegelnBeispiel (nicht ganz ernst zu nehmen, aber illustrativ): Meta-RegelRegel 1: Der Chef hat recht. Regel 2: Stimmt dies ausnahmsweise nicht, so findet Regel 1 Anwendung.
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
13
14
Das funktionale ParadigmaBeispiel: Csar-Verschlsselung Nimm jeweils den im Alphabet drittfolgenden BuchstabenCAESAR FDHVDU
Das prozedurale Paradigma imperatives Paradigma Pfadfinder-Gelndespiel:Geh zur alten Hhle Merk dir, wieviele Fichten davor stehen Geh den Weg weiter bis zur Gabelung Zhle die Fichten, die du hier siehst, dazu Wenn du insgesamt fnf Fichten gezhlt hast, geh den linken Weg weiter; wenn sieben, dann den rechten
jedes Vorkommen von 'A' kann durch 'D' ersetzt werden
Das Programm ist nur aus Funktionen (Abbildungen) im mathematischen Sinn aufgebaut. Jedes Vorkommen eines Funktionsaufrufes kann durch das Funktionsergebnis ersetzt werden. Funktionen haben keine Seiteneffekte; es gibt keine Variablen. n=0 1 Beispiel: Fakulttsfunktion n! = n > 0 n (n 1)!
{
3! 3(3-1)! 32! 32(2-1)! 321! 321(1-1)! 3210! 3211 6 hier: kann ersetzt werden durch
Der Lsungsweg ist durch eine Folge von Anweisungen vorgegeben Anweisungen knnen Werte in Variablen zwischenspeichern, lesen und verndernVO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
15
16
0.3 Algorithmendarstellung Wie man einen Algorithmus darstellen kann, hngt vom gewhlten Paradigma ab! Fr das prozedurale Paradigma bieten sich insbesondere an: GraphischAblaufdiagramme StruktogrammeAblaufdiagramm = FlussdiagrammAnweisungen stehen in Knoten Kontrollfluss: gerichtete Kanten Start summe = 0
Darstellung graphischStruktogrammAnweisungen stehen in Blcken Kontrollfluss: Form, Struktur der Blcke
summe = 0n>0? summe = summe + n JA drucke summe n=n1 Ende NEIN
n>0 summe = summe + n n=n1 drucke summe
PseudocodeKnstliche Programmiersprachenderivate Stilisierte Prosa
ProgrammiersprachenVO Algorithmen und Datenstrukturen E. Schikuta
Pro: leicht erfassbar, Standardnotation, auch dem Anwender verstndlich (Diskussionsbasis) Con: groe Programme unberschaubar, schwierig direkt in Programmiersprache umsetzbar, schwereditierbar, automatische Codegenerierung eher beschrnkt (meist nur Prozedurkpfe)VO Algorithmen und Datenstrukturen E. Schikuta
17
18
Darstellung PseudocodeProgrammiersprachenderivateAnlehnung an eine Programmiersprache (z. B. Pascal, MODULA-2); Ziel, eine der natrlichen Sprache mglichst nahe Kunstsprache zu schaffen (standardisierte Darstellung!) begin comment Das ist ALGOL; integer n,i,summe; read(n); summe := 0; for i := n step -1 until 1 do summe := summe + i; print(summe) end
Darstellung ProgrammierspracheKenneth E. Iverson, 1979Notation as a Tool of Thought Inventor of APL
Stilisierte ProsaBeschreibung der schrittweisen Ausfhrung
Schritt 1:Initialisiere. Setze summe auf 0. Schritt 2:Abarbeitung der Schleife. Solange n grer als 0, addiere n zu summe, ziehe 1 von n ab. Schritt 3:Ausgabe. Drucke summe.
int summe = 0; while(n > 0) { summe += n; n--; } cout n
nein
nein
while j < nja
?
j 0
j i
j j + 1
JA
Bedingung erfllt ?
NEIN
Teil 1
Teil 2
if (j > n) j = 0; else j = i;
Eintrittsbedingung Anweisung(en), Schleifenblock
while (j < n) j = j + 1;
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
25
26
Iteration oder SchleifeAnweisung wird abhngig von einer Bedingung wiederholt ausgefhrtVerschiedene Schleifenformen in Gebrauch Beispiel: while-FormAnweisung wird solange wiederholt, wie die Bedingung erfllt ist (Eintrittsbedingung) NEIN
Funktion / Prozedur (1) Abgeschlossene algorithmische Einheiten bestehen aus Sequenzen, Verzweigungen, Schleifen und Funktions-/Prozeduraufrufen FunktionEingangswerte, genau ein Ausgangswert
Bedingung erfllt? JA
Prozedurnur Eingangswerte
Eintrittsbedingung Anweisung
Anweisung
beide knnen ber Parameterliste Werte zurckliefern
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
27
28
Funktion/Prozedur (2)
0.5 Rekursion Ein Objekt heit rekursiv, wenn es durch sich selbst definiert ist, oder sich selbst (teilweise) enthlt. Beispiele:Fernseher Mathematik(Definition der Fakultt)
Funktionint sum(int n) { int summe = 0; while(n > 0) { summe += n; n--; } return summe; }
Prozedurvoid sum(int n) { int summe = 0; while(n > 0) { summe += n; n--; } printf(%d\n, summe); }
n = 0 n! = n > 0
1 n ( n 1) !
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
29
30
Rekursive Programmteile Eine Prozedur/Funktion heit rekursiv, wenn sie sich in der Folge ihrer Abarbeitung selbst referenziert. Eine Prozedur/Funktion P heit direkt rekursiv, wenn sie sich explizit selbst aufruft. Hingegen ist P indirekt rekursiv, wenn sie den Aufruf einer anderen Prozedur/Funktion enthlt, die ihrerseits wieder P (direkt oder indirekt) aufruft. Berechnung der Fakultt// Berechnung von n! fr n>=0 int fakultaet(int n) { if(n == 0) rekursiver return(1); Aufruf else return(n * fakultaet(n-1)); }
Direkte Rekursion
Berechnung der Fibonacci Zahlen// Berechnung der Fibonacci Zahlen int fibonacci(int n) { if(n logba dann T(n) = (nc)b
VO Algorithmen und Datenstrukturen
E. Schikuta
97
98
BeispielBinres Suchenint bs (int x, int z[], int l, int r) { if (l > r) // Schwelle, kein Element vorhanden return -1; // 0 verboten, da gltiger Indexwert! else { int m = (l + r) / 2; if (x == z[m]) // gefunden! return m; else if (x < z[m]) return bs(x, z, l, m-1); else // x > z[m] Fall 1: wenn c < logba dann T(n) = (nlogba) return bs(x, z, m+1, r); } Fall 2: wenn c = logba dann T(n) = (nc log n) } Fall 3: wenn c > logba dann T(n) = (nc)
Weitere BeispieleFall 1: wenn c < logba dann T(n) = (nlogba) Fall 2: wenn c = logba dann T(n) = (nc log n) Fall 3: wenn c > logba dann T(n) = (nc)
Beispiel: Mergesorta = 2, b = 2, c = 1
T(n) = 2T(n/2) + n = 2T(n/2) + (n)
Fall 2, da c = logba 1 = log22, ergibt T(n) = (n log n)
Beispiel: T(n) = 4T(n/2) + n = 4T(n/2) + (n)a = 4, b = 2, c = 1
Fall 1, da c < logba 1 < log24, ergibt T(n) = (nlog 4) = (n2)2
Laufzeit: T(n) = T(n/2) + 1 = T(n/2) + (1)Fall 2, da c = logba 0 = log21, ergibt T(n) = (log n)VO Algorithmen und Datenstrukturen E. Schikuta
Beispiel: T(n) = T(n/2) + n = T(n/2) + (n)a = 1, b = 2, c = 1
a = 1, b = 2, c = 0
Fall 3, da c > logba 1 > log21, ergibt T(n) = (n1) = (n)VO Algorithmen und Datenstrukturen E. Schikuta
99
100
Was nehmen wir mit? AlgorithmenparadigmenGreedy, Divide and Conquer, Dynamic Programming
Analyse und Bewertung von AlgorithmenEffektivitt, Korrektheit, Termination
Kapitel 2: Datenstrukturen
StrukturkomplexittMcCabe, Henry-Kafura, Fenton
LaufzeitkomplexittOrdnungsnotation, Algorithmische Lcke, Master Theorem
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
101
102
2.1 SituationJim Gray, 97
Magnetische Platten sind billiger als Papier Dateischrank:cabinet (4 drawer) paper (24,000 sheets) space (2x3 @ 10$/ft2) total 250$ 250$ 180$ 700$
Datenstrukturen (Datenbanken) speichern ALLE DatenThe Old World: Millionen von Objekten 100-Byte ObjektePeopleName Address
The New World: Milliarden von Objekten Groe Objekte (1MB)
3 /sheet Platte:disk (4 GB =) 500$ ASCII: 2 m pages
David Mike Won
NY People BerkName Address Papers Picture Voice
Austin
David NY Mike Berk
Won Austin
Paperless office Library of congress online All information online entertainment publishing business Information Network, Knowledge Navigator, Information at your fingertipsE. Schikuta VO Algorithmen und Datenstrukturen
(100x cheaper) 0.025 /sheet Image: 200 k pages (10x cheaper) .25 /sheet Conclusio: Speichere alles auf PlattenE. Schikuta
VO Algorithmen und Datenstrukturen
103
104
Moores Law XXX verdoppelt sich alle 18 Monate 60% Steigerung pro JahrMicro Prozessor Geschwindigkeit Chip Dichte Magnetische Platten Dichte Kommunikationsbandbreite 1GB 128MB WAN Bandbreite 1 chip memory size 8MB ( 2 MB to 32 MB) nhert sich LAN1MB 128KB 8KB 1970 1980 1990 2000
Beispiele (1) Magellan ProjektSatellit umkreiste die Venus, Radarabtastung zur Oberflchendarstellung Sandte 3 Terabyte Daten Rendering der Daten bentigt 13 Gigabyte / secZur Zeit technisch nicht durchfhrbar!
WettervorhersageZirkulationsmodelle der Atmosphre und der Ozeane1000 Jahre Simulation, 150 km2 Auflsung, 0.2 simulierte Jahre / Maschinenstunde Ein Durchlauf auf Intel Touchstone Delta 57 Wochen
bits: 1K 4K 16 64K 256K 1M 4M 16M64 256M K M
40 MB Daten /Simulationsminute = 20 TerabytesVO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
105
106
Beispiele (2)CERNs Herausforderung: Datagrid Neuer Beschleuniger LHC mit 4 DetektorenLarge Hadron Collider, 14 TeV Ziele: Suche nach Higgs Boson und Graviton (et al.) Start 2007
Detector Online Readout multi-level trigger filter out background reduce data volume26,7 km Umfang 100 Meter tief
40 Mleve l1-
Hz
ZieleWeltweiter Zugriff auf die DatenCERN und Regional Centers (Europa, Asien, Amerika) 2000 Benutzer
Riesige Datenvolumen Daten Semantik Performance und throughput
B/se data c) offli record ne a ing & naly sisE. Schikuta VO Algorithmen und Datenstrukturen
B/se spec c) 7 ial h leve 5 KH z (75 ardwa l2 5 K embedde GB/sec) re Hz dp leve (5 GB/ rocesso sec) l3rs 10 P (100 0 Hz Cs M
(40 T
VO Algorithmen und Datenstrukturen
E. Schikuta
107
108
Gigantische Datenmengen Charakteristische Gren (geschtzt)1-6 (vielleicht 100 ?) Petabyte / JahrZeitraum 15 bis 20 Jahre
Gre: Was ist ein Petabyte?1 Petabyte = 2 hoch 50, i.e. (1,125,899,906,842,624) bytes 1015 bytes1,000,000,000,000 business letters 100,000,000,000 book pages 50,000,000,000 FAX images 10,000,000,000 TV pictures (mpeg) 4,000,000 LandSat images 150,000 miles of bookshelf 15,000 miles of bookshelf 7,000 miles of bookshelf 10,000 days of video
10500 Knoten 2.1 Petabyte Platten Platz 340 Gigabyte IO Bandbreite Tapes ???
Library of Congress (in ASCII) enthlt 0.025 Petabyte Aktuelle und zuknftige Projekte generieren weit mehr Daten Auf uns warten Exa-, Zeta-, Yotta Byte !!!VO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
109
110
Geschwindigkeit: SpeicherzugriffszeitenWie weit sind die Daten entfernt ?SternbildAndromdeda Andromeda Tape /Optical RobotPluto
2.2 Motivation Beispiel: 100 Telefonnummern zu verwalten Ein Haufen Zettel mit Namen und NummernFinden einer Telefonnummern durch sequentielle Suche bentigt im Durchschnitt 50 Zugriffe
10 9 Clock Ticks
2,000 Years
106 Disk
2 Years
Zettel nach dem Namen sortiertSuche durch binres Aufteilen (in die Mitte, Schlsselvergleich und dann links oder rechts davon weitersuchen) Ungefhr ld 100 7 Zugriffe
100 10 2 1
Memory On Board Cache On Chip Cache Registers
Linz Sacramento
1.5 hr
This Campus 10 min This Room My Head 1 minE. Schikuta
RolodexZettel sortiert, in Ordnern und mit Namensindex Ziel mit einem (1!) Zugriff gewnschte NummerVO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
111
112
Ziele Information effizient zu verwalten! Was bedeutet effizient?Quantitative ZieleZugriffszeit schnelles Einfgen, Verndern, Lschen, ... (d.i. Bearbeiten im weitesten Sinn) der Daten Speicherplatz kompaktes Speichern der Information
DatenstrukturenErfllung dieser Ziele fhrte zur Entwicklung von
DatenstrukturenDatenstrukturen dienen zur Verwaltung groer Mengen hnlicher ObjekteUnterschiedliche Datenstrukturen dienen zur Verwaltung unterschiedlicher Objekte, die durch unterschiedliche Eigenschaften charakterisiert sind, daraus folgt:
Qualitative ZieleUntersttzung spezifischer Zugriffsarten auf Eigenschaften bzw. Charakteristiken der Daten
Fr unterschiedliche Problemstellungen unterschiedliche Datenstrukturen!
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
113
114
Beispiel: TelefonbuchverwaltungSuche in einem Telefonbuch mit 2000000 EintrgenAnnahme: Zugriff auf einen Datensatz in 0,01 ms
2.3 berblick Alle bekannten Datenorganisationsformen bauen auf einigen wenigen einfachen Techniken auf Sequentielle TechnikenListen Stack, Queue
Anstze (Zeit fr einen Zugriff)Sequentielles Suchen (im Mittel 1000000 * 0,01 ms = 10 s) Baumstruktur (ungefhr ld 2000000 * 0,01 = 0,21 ms) Hashverwaltung (1 Zugriff = 0,01 ms)
Zugriffzeit im Verhltnis zur Dateigre10000 1000
BaumstrukturenSequentiell Baumstruktur
100
Binrer Baum, B+-Baum, Priority Queue
10
HashverfahrenDictionary, Hash Tabelle, KollisionsverfahrenVO Algorithmen und Datenstrukturen E. Schikuta
1
Hashverfahren0,1
0,01 1 10 100 1000 10000 100000 1000000
VO Algorithmen und Datenstrukturen
E. Schikuta
115
116
Liste Eine Liste (list) dient zur Verwaltung einer beliebig Anzahl von Elementen eines einheitlichen Typs.Die Elemente werden in einer Sequenz angeordnet, die sich (meist) aus der Eintragereihenfolge ableiten lsst (ungeordnet). Der Aufwand des Zugriffes auf ein einzelnes Element ist abhngig von der Position in der Sequenz.... Kopf Ende
Spezielle Listen Stack (Keller)Elemente werden nach dem LIFO (last-in, first-out) Prinzip verwaltetAnwendungen: Kellerautomaten, Speicherverwaltung, Evaluationsordnung
Queue (Schlange)Elemente werden nach dem FIFO (first-in, first-out) Prinzip verwaltetAnwendungen: Warteschlangen, Bufferverwaltung, Prozessmanagement, Stoffwechsel
Anwendungensequentielle Datenbestnde, groe Datenmengen, externe SpeicherungVO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
117
118
Baum Der Baum (tree) stellt eine Generalisierung der Liste auf eine 2-dimensionale Datenstruktur dar.besteht aus Knoten und Kanten Exponentieller Zusammenhang zwischen Tiefe des Baumes und Anzahl der Knoten Anwendungen: allgemeine Schlsselverwaltung, Haupt- und Externspeichermanagement
Spezielle Bume Binrer BaumKnoten haben max. 2 Nachfolger, Hauptspeicherverwaltung Binrer Suchbaumgeordneter binrer Baum, Werteverwaltung
Heapungeordneter binrer Baum, Warteschlangen
B+-Baumbalanzierter Mehrwegbaum, Externspeicherverwaltung, Datenbanksysteme
TriePrefix-Baum, Zeichenkettenverwaltung, WrterbcherVO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
119
120
Vektor Ein Vektor (vector, Feld) verwaltet eine fix vorgegebene Anzahl von Elementen eines einheitlichen Typs.Zugriff auf ein Element ber einen ganzzahligen Index (die Position im Vektor) Aufwand des Zugriffes fr alle Elemente konstantx0 x1 x2 xn-1 xn
Spezielle Vektoren Hash TabelleDer Index eines Elements wird aus dem Element selbst berechnet (ber eine Hashfunktion h(x)) Anwendungen: Verwaltung von Tabellen (Compilertables, Namenslisten, ), bedingt Externspeicher-Management
DictionaryDer Index eines Elementes kann beliebigen Typ haben und wird mit dem Element gemeinsam gespeichert Anwendungen: Verwaltung komplexer (zusammengesetzter) Informationen, Zuordnungslisten
AnwendungenVerwaltung fix vorgegebener Anreihungen, Strings, math. KonzepteVO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
121
122
Vergleichskriterien DynamikDatenverwaltungEinfgen, Lschen
Informeller VergleichDatenstrukturListe
Strkendynamisch beliebige Datenmenge klares Modell geringer Speicherplatz dynamisch beliebige Datenmenge logarithmischer Aufwand der Operationen dynamisch direkter Elementzugriff konstanter Aufwand der Operationen
Schwchenlinearer Aufwand der Operationen simples Modell Balanzierungsalgorithmen aufwendigerer Speicherplatzverbrauch komplexes Modell oft fixe Datenmenge eingeschrnkte Operationen
Datenmengebeliebige oder fixe Anzahl von Elementen
AufwandLaufzeit der Operationen Speicherplatzverbrauch
Baum
ModellOperationenumfang
Vektor
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
123
124
Was nehmen wir mit? DatenorganisationEffizienz Quantitt - Qualitt Kapitel 3:
DatenstrukturenTypen Vergleichskriterien
Listen
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
125
126
3.1 Definition Listen Eine (lineare) Liste ist eine Datenstruktur zur Verwaltung einer beliebig groen Anzahl von Elementen eines einheitlichen Typs.Der Zugriff auf die einzelnen Elemente einer (simplen) Liste ist nur vom Kopf (Head) aus mglich. Das Ende der Liste wird auch als Tail bezeichnet. Die Elemente werden in einer Sequenz angeordnet, die sich (meist) aus der Eintragereihenfolge ableiten lt (ungeordnet).
Abstraktion Datenstrukturen stellen eine Abstraktion eines Vorstellungsmodells darBegriff des abstrakten Datentyps ADT
Sagt nichts ber die physische Realisierung am Computer ausVerschiedene Realisierungen denkbar! Realisierung oft abhngig von Problemstellung, Programmierumgebung, Zielsetzungen, ... Mgliches Vorstellungsmodell Liste Perlenschnur, Perlen werden an einem Ende aufgefdelt
... KopfVO Algorithmen und Datenstrukturen
EndeE. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
127
128
Liste Definition:Eine Liste L ist eine geordnete Menge von Elementen L = (x1, x2, , xn) Die Lnge einer Liste ist gegeben durch |L| = |(x1, x2, , xn)| = n Eine leere Liste hat die Lnge 0. Das i-te Element einer Liste L wird mit L[i] bezeichnet, daher gilt 1 i |L| EinfgenElement am Kopf einfgen
Methoden auf Listen
ZugriffKopfelement bestimmen
LschenKopfelement entfernen
andere Operationen denkbar siehe spter!
ErzeugenListe neu anlegen
LngenbestimmungAnzahl der Elemente bestimmen
InklusionstestTest, ob Element enthalten ist
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
129
130
Methode Einfgen Methode AddEinfgen eines Elementes a am Kopf einer Liste L, d.h.L = (x1, x2, , xn), x0 Add(L, x0) L = (x0, x1, , xn) Vorstellungsmodell Perlenschnur: Perle auffdeln x1 x2 ... xn
Methode Zugriff Methode FirstElementZugriff ber das Kopfelement (x1, das erste Listenelement) auf die Liste , d.h.L = (x1, x2, , xn) FirstElement(L) x1Fehler falls Liste leer
x0x1
Vorstellungsmodell Perlenschnur: Perle betrachten und Eigenschaften feststellen xn
x2
...
x1x0VO Algorithmen und Datenstrukturen
x1
x2
...
xnE. Schikuta
liefert den Wert des Elements, NICHT das Listenelement !VO Algorithmen und Datenstrukturen E. Schikuta
131
132
Methode Lschen Methode RemoveFirstLscht das Kopfelement (x1, das erste Listenelement) aus der Liste L, d.h.L = (x1, x2, , xn), mit |L| = n RemoveFirst(L) L = (x2 , xn), mit |L| = n-1 x1 x2 x3 ... xn Vorstellungsmodell Perlenschnur: Perle abziehen
Methode Erzeugen Methode Constructor'Erzeugt eine neue Liste, die leer ist, d.h. keine Elemente enthlt und daher die Lnge 0 hat,Constructor() L, mit |L| = 0 Vorstellungsmodell Perlenschnur: Perlenschnur vorbereiten
x2VO Algorithmen und Datenstrukturen
x3
...
xnE. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
133
134
Methode Lngenbestimmung Methode LengthBestimmt die Anzahl der Elemente der Liste L, d.h.L = (x1, x2, , xn), mit |L| = n Length(L) n
Methode Inklusionstest Methode Memberberprft, ob ein gegebenes Element a in der Liste L enthalten ist, d.h.L = (x1, x2, , xn) Member(L, a) [true, false] Vorstellungsmodell Perlenschnur: Perle mit spezifischer Eigenschaft suchen xn
x1
x2
...
xn Vorstellungsmodell Perlenschnur: Anzahl Perlen bestimmen
true i | 1 i |L| a = xi false sonst
nliefert den ganzzahligen Wert n
x1
...
a
...
trueVO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
135
136
Klasse Listen Deklaration C++, Klassetypedef ItemType; class List { public: List(); // Constructor void Add(itemType a); ItemType FirstElement(); void RemoveFirst(); int Length(); int Member(itemType a); }VO Algorithmen und Datenstrukturen
3.2 Implementierung von Listen SpeichertypenContiguous memory
zur Verwendung in der Klassen Def., besserer Ansatz mit C++ Templates
22200 22208 22216 22224 22232 22240 22248 22256 22264 22200 22208 22216 22224 22232 22240 22248 22256 22264
Scattered (Linked) memory
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
137
138
Memory TypenContiguous memoryPhysisch zusammenhngender Speicherplatzbereich, uerst starr, da beim Anlegen die endgltige Gre fixiert wird. Verwaltung ber das System. Datenstrukturen auf der Basis von contiguous memory knnen nur eine begrenzte Anzahl von Elementen aufnehmen.
C++ Konstrukt: Feld Contiguous memoryEin Feld bzw. Array ist einer Anreihung einer fixen Anzahl von Elementen des gleichen Typs.Der Zugriff auf ein einzelnes Feldelement erfolgt ber eine Index (die relative Position im Feld). Der Index startet oBdA mit 0 und endet mit Anzahl-1. Vereinbarung [] z.B.: double x[10]; int a[10000]; char name[25];
Scattered (Linked) memoryPhysisch verteilter Speicherbereich, sehr flexibel, da die Ausdehnung dynamisch angepat werden kann. Verwaltung ber das Programm. Datenstrukturen knnen beliebig gro werden.
Zugriff[index] z.B.: x[0] = 3.1415 * r * r; a[9999] = 0;
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
139
140
C++ Konstrukt: Dynamische Objekte Scattered memoryDynamische ObjekteObjekte die zur Laufzeit des Programmes durch Programmanweisungen erzeugt und fr die Speicherplatz angelegt wird. Diese Objekte besitzen keinen Namen und werden ber sog. Zeiger (Pointer) verwaltet. z.B.:double x = 3.14159; double* p = &x; // & liefert Adr. von x cout ... Zugriff auf eine Strukturkomponente ber einen Zeiger, d.h. x->y entspricht (*x).yE. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
141
142
3.2.1 Liste - statisch - Struktur Statische Implementation - contiguous memorySpeichern der Elemente in einem Feld begrenzter Lngetypedef int ItemType; class List { private: p ItemType list[8]; // Datenstruktur int p; // nchste freie Position } list 0 1 2 3 4 5 6 7 Lnge = 8
Liste - statisch Erzeugen - Zerstren - Einfgen Erzeugen,List::List() {p = 0;}
ZerstrenList::~List() {p = 0;}
Einfgenvoid List::Add(ItemType a) { if(p < 8) { list[p] = a; p++; } else cout 0) return list[p-1]; else cout 0) p--; else cout next = head; Typischerweise help->value = a; am Kopf der Liste head = help; }
Liste - dynamisch Erzeugen - Zerstren Erzeugen, LschenList::List() { head = 0;} List::~List() { Element* help; while(head != 0) { help = head; head = head->next; delete help; help } } head
Vor dem Einfgen head0
Anfang 1. Durchlauf 2. Durchlauf0
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
149
150
Liste - dynamisch - Zugriff ZugriffItemType List::FirstElement() { if(head != 0) return head->value; else cout next; delete help; } else cout next; } return length; } help head0VO Algorithmen und Datenstrukturen
Liste - dynamisch - Inklusionstest Inklusionstestint List::Member(ItemType a) { Element* help = head; while(help != 0 && help->value != a) help = help->next; if(help != 0) return 1; else return 0; } help head
Checkpoint Anfang, 1. Durchlauf 2. Durchlauf 3. Durchlauf length: 0 length: 1 length: 2 length: 3
?E. Schikuta VO Algorithmen und Datenstrukturen
x
y
z
0
E. Schikuta
153
154
Liste - TraversierenSequentielles Abarbeiten einer Liste, Besuchen aller Elementehead 1. Initialisieren des Hilfszeigershelp = head;help head0
3.3 StackDer Stack (Kellerspeicher) ist ein Spezialfall der Liste, die die Elemente nach dem LIFO (last-in, first-out) Prinzip verwaltetIdee des Stacks: Man kann nur auf das oberste, zuletzt daraufgelegte Element zugreifen (vergleiche Buchstapel, Holzsto, ...)Anwendungen: Kellerautomaten, Speicherverwaltung, HP-Taschenrechner (UPN), ...
0
help
2. Weitersetzen des Hilfszeigers (Position)help = help -> next;help head0
Das Verhalten des Stacks lsst sich ber seine (recht einfachen) Operationen beschreibenpush: Element am Stack ablegen top: Auf oberstes Element des Stacks zugreifen pop: Element vom Stack entfernen isEmpty: Test auf leeren Stack ?E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
3. Abfrage auf Listenende (und Suchkriterium)while ( help != 0 && ) { }help head0
VO Algorithmen und Datenstrukturen
155
156
Methoden auf Stacks Methode PushElement wird auf dem Stack abgelegt (an oberster Position).0 1
Stack als Liste Stack ist eine spezielle Liste, daher knnen die Stackoperationen durch Listenoperationen ausgedrckt werden.Push(S,a) Top(S) Pop(S) Add(S,a) FirstElement(S) RemoveFirst(S)
2
Methode TopLiefert den Inhalte des obersten Elementes des Stacks.
00
1 20
IsStackEmpty(S) wenn Length(S) = 0 return true sonst false
Methode PopOberstes Element des Stacks wird entfernt.VO Algorithmen und Datenstrukturen
12
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
157
158
3.4 QueueDie Queue (Warteschlange) ist ein Spezialfall der Liste, die die Elemente nach dem FIFO (first-in, first-out) Prinzip verwaltetIdee: Die Elemente werden hintereinander angereiht, wobei nur am Ende der Liste Elemente angefgt und vom Anfang der Liste weggenommen werden knnen Anwendungen: Warteschlangen, Bufferverwaltung, Stoffwechsel, Prozessmanagement,
Methoden auf Queue Methode EnqueueElement wird am Ende der Queue abgelegt (an letzter Position)0 1
2
Einfache OperationenEnqueueElement am Ende der Queue ablegen
Methode FrontLiefert den Inhalte des ersten Elementes der Queue2
0
12
FrontErstes Element der Queue zugreifen
DequeueErstes Element aus der Queue entfernen
Methode DequeueErstes Element der Queue wird entferntE. Schikuta VO Algorithmen und Datenstrukturen
0
1 2
IsQueueEmptyTest auf leere QueueVO Algorithmen und Datenstrukturen
E. Schikuta
159
160
Queue als Liste Queue ist ebenfalls eine spezielle Liste, daher sollten alle Queueoperationen auch durch Listenoperationen ausgedrckt werden knnen.Enqueue(Q,a) Front(Q) Dequeue(Q) Add(S,a) ? Nicht trivial ! ?
Front(Q) Front(Q)ItemType e; // Hilfselement List L; // Hilfsliste int n = Q.Length(); for (int i = 1; i next; 2 Hilfszeiger actpos++; } if(act == 0) return; pred->next = act->next; delete act; } }VO Algorithmen und Datenstrukturen E. Schikuta
L = (x1, , xi-1, xi+1, , xn), i pred act
head0 Position:VO Algorithmen und Datenstrukturen
i-1
i
i+1E. Schikuta
167
168
Methode AddElementAnalog auch AddElement mgl.: Einfgen an beliebiger Stellevoid List::AddElement(ItemType a, int pos) { Element* pred, * act; int actpos = 2; if(pos == 1) Add(a); erstes Element else { pred = head; act = head->next; while(act != 0 && actpos < pos) { pred = act; act = act->next; 2 Hilfszeiger actpos++; } pred->next = new Element; pred->next->value = a; pred->next->next = act; } }VO Algorithmen und Datenstrukturen E. Schikuta
Stack - Queue Klasse C++ Klassen Deklaration (Skizze)Stackclass Stack { public: Stack(); bool Push(ItemType a); ItemType Top(); bool Pop(); bool IsStackEmpty(); }
Queueclass Queue { public: Queue(); bool Enqueue(ItemType a); ItemType Front(); bool Dequeue(); bool IsQueueEmpty(); }
VO Algorithmen und Datenstrukturen
E. Schikuta
169
170
Vergleich "unserer" Datenstrukturen Generelle Unterscheidung zwischen statischer und dynamischer Realisierungstatische R.: contigous memory, Felder dynamische R.: dynamic memory, dynamische ObjekteKonstruktor Destruktor Add FirstElement RemoveFirst Length Member
Aufwandsvergleich "unserer" Listen ImplementationenListe Liste statisch dynamisch Speicherplatz O(n) O(1) O(1) O(1) O(1) O(1) O(1) O(n) O(n) O(1) O(n) O(1) O(1) O(1) O(n) O(n) AccessElement AddElement Liste Liste statisch dynamisch O(1) O(n) O(n) O(n) O(n) RemoveElement O(n)
DatenverwaltungEinfgen und Lschen wird untersttzt
Datenmengestatische R.: beschrnkt, abhngig von der Feldgre dynamische R.: unbeschrnktabhngig von der Gre des vorhandenen Speicherplatzes
eher simple ModelleVO Algorithmen und Datenstrukturen E. Schikuta
Achtung: Eigentlicher Aufwand O(n) in Add und RemoveFirst verstecktVO Algorithmen und Datenstrukturen E. Schikuta
171
172
Aufwandsvergleich "unserer" Stack - Queue ImplementationenStack Stack statisch dynamisch Speicherplatz O(n) Konstruktor Destruktor Push Pop Top O(1) O(1) O(1) O(1) O(1) O(n) O(1) O(n) O(1) O(1) O(1) O(1) Speicherplatz Konstruktor Destruktor Enqueue Dequeue Front Queue Queue statisch dynamisch O(n) O(1) O(1) O(1) O(1) O(1) O(n) O(1) O(n) O(1) O(n) O(n) O(1)
3.5 Spezielle Listen Doubly Linked Listdoppelt verkettet Liste
Circular ListZirkulr verkettete Liste
Ordered ListGeordnete Liste
Double Ended ListDoppelkpfige Liste
IsStackEmpty O(1)
IsQueueEmpty O(1)
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
173
174
Doubly Linked List Doppelt verkettete Listex1 x2 x3 x4
Circular List Zirkulr verkettete ListeZeiger des letzten Element verweist wieder auf das erste Element Ring Buffer Vorsicht beim Eintragen und Lschen des ersten Elementes!
jedes Element besitzt 2 Zeiger, wobei der eine auf das vorhergehende und der andere auf das nachfolgende Element zeigt Basis-Operationen einfachclass Node { KeyType Key; Node* Pred; Node* Succ; }VO Algorithmen und Datenstrukturen
x1 x2 Pred Key Succ x5 x3 x4E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
175
176
Ordered List Geordnete ListeElemente werden entsprechend ihres Wertes in die Liste an spezifischer Stelle eingetragen Meist der Gre nach geordnet Eintragen an spezifischer Stelle, die erst gefunden werden mu Traversieren
Double Ended List Liste mit 2 KpfenJede Liste besitzt 2 Zeiger, die zum Kopf und zum Ende der Liste zeigen Vereinfacht das Einfgen am Kopf und am Ende der Liste
2
4
9
17
Tail Head
x1
x2
x3
x4
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
177
178
Was nehmen wir mit? ListenOperationen Speicherung Contigous - Scattered memory Kapitel 4:
Stack Queue Vergleich Spezielle ListenDoubly Linked List Circular List Ordered List Double Ended ListVO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen
Bume
E. Schikuta
179
180
4.1 Definition Bume Ein Baum (tree) ist ein spezieller Graph, der eine hierarchische Struktur ber eine Menge von Objekten definiertIntuitives Vorstellungsmodell - Nicht-lineare Datenstruktur AnwendungenReprsentieren Wissen, Darstellung von Strukturen, Abbildung von Zugriffspfaden, Analyse hierarchischer Zusammenhnge, ... StammbaumCronus Zeus Poseidon Demeter Persephone
Beispiel BumeProzessorfamilien8088 68000 68020 68030 68040
8080 8085 80186 8086 80286 80386 80486 Pentium
Spezialfall Liste
Gaea Phoebe Pluto Apollo Atlas Ocean Iapetus Prometheus
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
181
182
Definition Bume (1) Ein Baum besteht aus einer Menge von Knoten, die durch gerichtete Kanten verbunden sindEin Pfad oder Weg ist eine Liste sich unterscheidender Knoten, wobei aufeinander folgende Knoten durch eine Kante verbunden sind
Komponenten Die Wurzel ist der einzige Knoten mit nur wegfhrenden Kanten Knoten von denen keine Kanten wegfhren heien Blatt (leaf) Pfad/Weg von der Wurzel Wurzel zum Blatt Knoten, in die Kanten hinein- und von denen Knoten (interner) Kanten wegfhren, heien interne KnotenKante Blatt
Es gibt genau einen Pfad der 2 Knoten miteinander verbindet und jeder Knoten hat nur einen direkten Vorgnger; alle Vorgnger sind von ihm selbst verschieden (definierende Eigenschaft eines Baumes)Ein Baum enthlt daher keine Kreise, d.i. ein Pfad bei dem der Startknoten gleich dem Endknoten ist
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
183
184
Gltige und ungltige Bume Gltige Bume
Definition Bume (1)Jeder Knoten (mit Ausnahme der Wurzel) hat genau einen Knoten ber sich, den man als Elternknoten oder bergeordneten Knoten bezeichnet Die Knoten direkt unterhalb eines Knotens heien Kindknoten oder untergeordnete Knoten Transitive Eltern werden als Vorgnger bzw. transitive Kinder als Nachfolger bezeichnet Vorgnger Rumlich nebeneinanderElternknoten, bergeordneter Knoten liegende Knoten auf Adjazenter Knoten derselben Tiefe heien Nachbarknoten adjazent oder Nachbarn usFo k
Ungltige Bume
Kindknoten, untergeordneter Knoten Nachfolger
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
185
186
Rekursive Baum DefinitionEin einzelner Knoten ohne Kanten ist ein Baum Seien T1, , Tk (k > 0) Bume ohne gemeinsame Knoten. Die Wurzeln dieser Bume seien r1, , rk. Ein Baum T0 mit der Wurzel r0 besteht aus den Knoten und Kanten der Bume T 1, , Tk und neuen Kanten von r0 zu den Knoten r1, , rk Der Knoten r0 ist dann r r r ... die neue Wurzel T T und T1, , Tk sind T r Unterbume von T01 2 k k 1 2 0
Lnge, Hhe, Tiefe Die Lnge eines Weges zwischen 2 Knoten entspricht der Anzahl der Kanten auf dem Weg zwischen den beiden Knoten Die Hhe eines Knoten ist die Lnge des lngsten Weges von diesem Knoten zu den erreichbaren Blttern Die Tiefe eines Knoten ist die Lnge des Weges zur Wurzel Die Hhe eines Baumes entspricht der Hhe der WurzelVO Algorithmen und Datenstrukturen E. Schikuta
r1 ri Wurzel des Baumes i Ti Unterbaum i T1
r2 ... T2
rk Tk
VO Algorithmen und Datenstrukturen
E. Schikuta
187
188
Lnge, Hhe, Tiefe grafisch
Beispiel Parse TreeParsierungsbume (parse trees) analysieren Anweisungen bzw. Programme einer Programmiersprache bezglich einer gegebenen Grammatik Eine Grammatik definiert Regeln, wie und aus welchen Elementen eine Programmiersprache aufgebaut ist
Tiefe (depth)
Beispiel: C++ (Ausschnitt)Hhe (height)
::= | ::= if ( ) else ::= | | ident ::= < ::= ident =
Nonterminal Symbole (werden aufgelst) if, ident Terminalsymbole (nicht mehr aufgelst) ::=, | Grammatiksymbolik
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
189
190
Beispiel Parse Tree (2)if (a < b) max = b else max = a if ( ) ident max = ident b ::= | ::= if ( ) else ::= | | ident ::= < ::= ident =
Spezielle BumeBume (trees)
else
ungeordnete Bume (unordered trees)
geordnete Bume (ordered trees)
ident a <
ident max = ident a
binre Bume (binary trees)
Mehrweg Bume (multiway trees)
ident b
Die Ordnung bezieht sich auf die Position der Knoten im Baum (Knoten A links von Knoten B) und nicht auf die Werte der KnotenelementeVO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
191
192
4.2 Binre Bume Binre Bume sind geordnete Bume, in denen jeder Knoten maximal 2 Kinder hat und die Ordnung der Knoten mit links und rechts festgelegt istBinrer Baum mit 2 Kindern Binrer Baum mit rechtem Kind (right child) Binrer Baum mit linkem Kind (left child) Binrer Baum ohne Kind (Blatt)VO Algorithmen und Datenstrukturen E. Schikuta
Binre Bume - Eigenschaften Hufiger Einsatz in Algorithmen Effiziente ManipulationsalgorithmenZusammenhang zw. Anzahl der Elemente und der Hhe
Hhe 0 1 Knoten 1 Blatt
Hhe 1 3 Knoten 2 Bltter
Hhe 2 7 Knoten 4 Bltter
In jeder neuen Ebene wird im optimalen Fall die Anzahl der Bltter verdoppelt
Entartung mglich: Jeder Knoten hat genau ein Kind entspricht linearer ListeVO Algorithmen und Datenstrukturen E. Schikuta
193
194
Formen binrer BumeLeerer binrer BaumBinrer Baum ohne Knoten
Voller binrer Baum Full binary treeJeder Knoten im Baum hat keine oder genau 2 Kinder.Mit anderen Worten, kein Knoten besitzt nur 1 Kind
Voller binrer BaumJeder Knoten hat keine oder 2 Kinder
Perfekter binrer BaumEin voller binrer Baum bei dem alle Bltter dieselbe Tiefe besitzen
Kompletter binrer BaumEin perfekter binrer Baum mit der Ausnahme, dass die Blattebene nicht vollstndig, dafr aber von links nach rechts, gefllt ist
Hhen-balanzierter binrer BaumFr jeden Knoten ist der Unterschied der Hhe des linken und rechten Kindes maximal 1
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
195
196
Perfekter binrer Baum Perfect binary treeEin voller binrer Baum (alle Knoten haben keine oder genau 2 Kinder) bei dem alle Bltter dieselbe Tiefe besitzen.
Eigenschaften des perfekten binren Baumes EigenschaftenFrage: welche Hhe h muss ein perfekter binrer Baum haben um n Bltter zu besitzenIn jeder Ebene Verdoppelung, d.h. 2h = n h * log 2 = log n h = log2 n = ld n
Ein perfekter binrer Baum der Hhe h besitzt 2h+1-1 Knotendavon sind 2h Bltter Beweis mit vollstndiger Induktion
Zusammenhang zwischen Knoten/Bltter und Hhe: O(n) Knoten/Bltter : O(log n) Hhe wichtigsteEigenschaft von BumenVO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
197
198
Kompletter binrer Baum Complete binary treeEin kompletter binrer Baum ist ein perfekter binrer Baum mit der Ausnahme, dass die Blattebene nicht vollstndig, dafr aber von links nach rechts, gefllt ist
Hhen-balanzierter binrer Baum Height-balanced binary treeFr jeden Knoten ist der Unterschied der Hhe des linken und rechten Kindes maximal 1Dies garantiert, dass lokal fr jedes Kind die Balanzierungseigenschaft relativ gut erfllt ist, global aber die gesamten Baumdifferenzen grer sein knnen einfachere Algorithmen
EigenschaftEin kompletter binrer Baum mit n Knoten hat eine Hhe von maximal h = log2 nVO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
199
200
Baum Traversierung Traversieren eines Baumes bezeichnet das systematische Besuchen aller seiner KnotenUnterschiedliche Methoden unterscheiden sich in der Reihenfolge der besuchten Knoten Mgliche Reihenfolgen A, B, C B, A, C B, C, A
Expression TreeSystematische Auswertung eines mathematischen Ausdrucks Ein mathematischer Ausdruck kann in Form eines Expression Trees angegeben werden+
(20 / 5) + 3/ 3
A
20
5
B
C
Bltter reprsentieren Operanden (Zahlenwerte), interne Knoten Operatoren Baumdarstellung erspart Klammernnotation
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
201
202
TraversierungsalgorithmusTraversierungsalgorithmen bestehen prinzipiell aus 3 verschiedenen SchrittenBearbeiten eines Knotens (process node) Rekursiv besuchen und bearbeiten des linken Kindes (visit left child) Rekursiv besuchen und bearbeiten des rechten Kindes (visit right child)
Preorder TraversierungAlgorithmuspreorder(node) { if(node != 0) { process(node) preorder(left child) preorder(right child) } }
Beispiel20/5+3+
A3
Durch unterschiedliches Anordnen der 3 Schritte unterschiedliche Reihenfolgen 3 Bearbeitungsreihenfolgen interessantPreorder Traversierung Postorder Traversierung Inorder Traversierung
B C20
/
E
Besucht die Knoten im Baum in PrefixNotation-Reihenfolge(Operator, Operand 1, Operand 2)
5
D
FaustregelKnoten bearbeiten beim 1. Besuch
AnwendungLISP, Assembler
Process-Reihenfolge: Notation-Reihenfolge:
ABCDE + / 20 5 3
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
203
204
Postorder TraversierungAlgorithmuspostorder(node) { if(node != 0) { postorder(left child) postorder(right child) process(node) } }
Inorder TraversierungAlgorithmus
Beispiel20/5+3+
A3
Postfix-Notation-Reihenfolge(Operand1, Operand2, Operator)
B C20
/
E
inorder(node) { if(node != 0) { inorder(left child) process(node) inorder(right child) } }
Beispiel20/5+3+
A3
B C20
/
E
Infix-Notation-Reihenfolge5
FaustregelKnoten bearbeiten beim letzten Besuch
D
(Operand1, Operator, Operand2)
5
D
FaustregelProcess-Reihenfolge: Notation-Reihenfolge: CDBEA 20 5 / 3 + Knoten bearbeiten beim 2. oder letzten Process-Reihenfolge: Besuch Notation-Reihenfolge: einfacher algebraischer Taschenrechner (ohne Klammern)E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
AnwendungInvers Polish Notation, HP Taschenrechner, FORTH
Anwendung
CBDAE 20 / 5 + 3
VO Algorithmen und Datenstrukturen
205
206
4.3 Binre Suchbume In einem Binrbaum besitzt jeder (interne) Knoten eine linke und eine rechte Verbindung, die auf einen Binrbaum oder einen externen Knoten verweistVerbindungen zu externen Knoten heien Nullverbindungen, externe Knoten besitzen keine weiteren Verbindungen
Schlsseleigenschaft im BST Fr jeden internen Knoten gilt, dass alle Werte der Nachfolger im linken Unterbaum kleiner (oder gleich) dem Knotenwert und die Werte der Nachfolger im rechten Unterbaum grer als der Interne Knotenwert sind12 3 10 11 15 21Knoten Externe KnotenReprsentieren quasi die Datenspeicher (enthalten nur mehr Schlssel und Daten, keine Zeiger auf Nachfolger), z.B. Seiten auf der Platte Bei Hauptspeicherstrukturen meist vernachlssigbarwerden im Weiteren grafisch oft nur mehr durch einen Strich dargestelltVO Algorithmen und Datenstrukturen E. Schikuta
Ein binrer Suchbaum (binary search tree, BST) ist ein Binrbaum, bei dem jeder interne Knoten einen Schlssel besitztexterne Knoten besitzen keine Schlssel Auf den Schlsseln ist eine lineare Ordnung leftchild, a); else return MemberR(h->rightchild, a); } } bool SearchTree::Member(ItemType a) { return MemberR(root, a); } Aufruf: SearchTree t; t.Member(7);
Aufruf:SearchTree t; t.Member(7); Verzweigung auf root->leftchild, da root->info > a (d.I. 12 > 7) 12 15
7 return true, da root->info == a (gefunden!)VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
213
214
Einfgen in einem binren Suchbaum Das Einfgen entspricht einer erfolglosen Suche (wobei gleiche Schlssel bergangen werden) und dem Anfgen eines neuen Knotens an der Nullverbindung wo die Suche endet (anstelle des externen Knotens)Einfgen 13 Suche12 7 3 11 15 21 3 7 11 13
Einfgen (iterativ)hnlich dem Einfgen in eine Liste (2 Hilfszeiger)void SearchTree::AddI(ItemType a) { Aufruf: if(root) { link current = root; SearchTree t; link child; current, child while(1) { t.Add(7); if(a info) { child = current->leftchild; if(!child) {current->leftchild = new node(a, 0, 0); return;} } else { child = current->rightchild; if(!child) {current->rightchild = new node(a, 0, 0); return;} } current = child; } } else { current root = new node(a, 0, 0); return; child } } 12 void SearchTree::Add(ItemType a) { AddI(a); 7 15 }
Hilfszeiger:
Knoten anfgen12 15 21
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
215
216
Einfgen (rekursiv)void SearchTree::AddR(link& h, ItemType a) { if(!h) {h = new node(a, 0, 0); return;} if(a info) AddR(h->leftchild, a); Man beachte die Verwendung eines Referenzparameters else (link&), erspart die 2 AddR(h->rightchild, a); Hilfszeiger } void SearchTree::Add(ItemType a) { AddR(root, a); }
Traversierenvoid SearchTree::PrintR(link h, int n) { if(!h) return; Inorder PrintR(h->rightchild, n+2); Traversierung for(int i = 0; i < n; i++) cout km: fortsetzen im Unterbaum pm Falls man einen externen Knoten erreicht: Suche erfolglos
2-3-4 Bume Ein 2-3-4 Baum ist ein Mehrwegbaum mit den folgenden 2 EigenschaftenGreneigenschaft: jeder Knoten hat mindestens 2 und maximal 4 Kinder Tiefeneigenschaft: alle externe Knoten besitzen dieselbe Tiefe Abhngig von der Anzahl der Kinder heit ein interner Knoten 2-Knoten, 3-Knoten oder 4-Knoten11 37 3 9 13 39 45 53
Beispiel: Suche 5011 37 3 9 13 39 45 53 50VO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
237
238
Hhe eines 2-3-4 Baumes Satz: Ein 2-3-4 Baum, der n interne Knoten speichert, hat eine Hhe von O(log n) BeweisDie Hhe des 2-3-4 Baumes mit n internen Knoten sei h Da es mindestens 2i interne Knoten auf den Tiefen i = 0, , h-1 gibt und keine internen Knoten auf Tiefe h, gilt n 1 + 2 + 4 + + 2h-1 = 2h 1 Daher gilt h log2 (n + 1) Knoten Tiefe1 2 2h-1 0VO Algorithmen und Datenstrukturen
Einfgen in einen 2-3-4 BaumEin neuer Schlssel s wird im Elternknoten v des externen Knotens eingefgt, den man bei der Suche nach s erreicht hatDie Tiefeneigenschaft des Baumes wird erhalten, aber es wird mglicherweise die Greneigenschaft verletzt Ein (Knoten-) berlauf ist mglich (es entsteht ein 5-Knoten)
Beispiel: Einfgen von 30 erzeugt berlauf11 24 3 9 13 27 32 35 v 11 24 3 9 13
0 1 h-1 hE. Schikuta VO Algorithmen und Datenstrukturen
5-Knotenv 27 30 32 35
E. Schikuta
239
240
berlauf und SplitEin berlauf (Overflow) bei einem 5-Knoten v wird durch eine Split Operation aufgelstDie Kinder von v seien v1, , v5 und die Schlssel von v seien k1, , k4 Knoten v wird durch die Knoten v und v ersetzt, wobeiv ein 3-Knoten mit den Schlsseln k 1 und k2 und Kindern v1, v2 und v3, v ein 2-Knoten mit Schlssel k 4 und Kindern v4 und v5 ist
Lschen Der Lschvorgang wird auf den Fall reduziert, wo der zu lschende Schlsselwert in einem internen Knoten mit externen Knotenkindern liegt Andernfalls wird der Schlsselwert mit seinem Inorder Nachfolger (oder Inorder Vorgnger) ersetztAnalog Fall 3 binre Suchbume
Schlssel k3 wird in den Elternknoten u von v eingefgt (dadurch kann eine neue Wurzel entstehen)
Ein berlauf kann an die Vorgnger von u propagiert werden11 24 3 9 13 u v 27 30 32 35 v1 v2 v3 v4VO Algorithmen und Datenstrukturen
Beispiel Lschen Schlssel 2411 24 11 27 27 32 35 3 9 13 32 35 v v5
11 24 32 3 9 v5 13
u v v3 v4 35 3 9
27 30 v1 v2
13
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
241
242
UnterlaufDurch das Lschen eines Schlssels in einem Knoten v kann es zu einem Unterlauf (underflow) kommenKnoten v degeneriert zu einem 1-Knoten mit einem Kind und keinem Schlssel 11 27 v 3 9 13
Verschmelzen im 2-3-4 Baum Fall 1: Verschmelzen von KnotenBedingung: Alle adjazenten Knoten (benachbarte Knoten auf derselben Tiefe) zum unterlaufenden Knoten v sind 2Knoten Man verschmilzt v mit einem/dem adjazenten Nachbarn w und verschiebt den nicht mehr bentigten Schlssel vom Elternknoten u zu dem verschmolzenen Knoten v Das Verschmelzen kann den Unterlauf zum Elternknoten propagierenu 3 9 11 27 13 w v u 3 9 11 13 27 v
Bei einem Unterlauf kann man 2 Flle unterscheidenFall 1: VerschmelzenBenachbarte Knoten werden zu einem erlaubten Knoten verschmolzen
Fall 2: VerschiebenSchlsselwerte und entsprechende Kinder werden zwischen Knoten verschoben
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
243
244
Verschieben im 2-3-4 Baum Fall 2: Verschieben von SchlsselnBedingung: Ein adjazenter Knoten (benachbarter Knoten auf derselben Tiefe) w zum unterlaufenden Knoten v ist ein 3-Knoten oder 4-Knoten Man verschiebt ein Kind von w nach v Man verschiebt einen Schlssel von u nach v Man verschiebt einen Schlssel von w nach u Nach dem Verschieben ist der Unterlauf behobenu 3 9 11 27 13 20 w v 3 9 u 11 20 13 w 27 v
Analyse 2-3-4 BaumDatenverwaltungEinfgen und Lschen untersttzt
Datenmengeunbeschrnkt
ModelleHauptspeicherorientiert Untersttzung komplexer OperationenBereichsabfragen, Sortierreihenfolge
Laufzeit
Speicherplatz Verschmelzen, Verschieben Zugriff Einfgen Lschen Sortierreihenfolge
O(n) O(1) O(log n) O(log n) O(log n) O(n)E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
245
246
Vergleich der Baumvarianten ZielBaumhhe + Baumvariante Aufwand der Operationen Allgemeiner Binrer Suchbaum AVL-Baum Im Durchschnitt log(n) log(n) Balanzierungsform Abhngig von der Eingabe Methode Zufall, Gesetz der groen Zahlen Rotationen
4.6 Externspeicherverwaltung
Erstellen eines Schlsselbaumes fr eine groe Anzahl von Elementen
ProblemHauptspeicher zu klein
LsungSpeicherung der Knoten auf dem Externspeicher (Platte)Hauptspeicher
hhenbalanziert
2-3-4 Baum
log(n)
Split, perfektbalanziert Verschmelzen, Verschieben
01001010010101 11101101101010 01010101011101 ...
PlatteE. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
247
248
Plattenzugriffe AnsatzReferenzieren eines Knotens entspricht Zugriff auf die PlatteBei Aufbau eines binren Schlsselbaumes fr eine eine Datenmenge von z.B. einer Million Elementen ist die durchschnittliche Baumhhe log2106 20, d.h. 20 Suchschritte 20 Plattenzugriffe
Seitenverwaltung LsungZerlegung des binren Baumes in Teilbume, diese in sog. Seiten (pages) speichern
DilemmaUnterschied Aufwand Platten- zu Hauptzugriff Faktor 100000, milli- zu nano-Sekunden (z.B. 5ms 60 ns) Jeder Suchschritt bentigt einen Plattenzugriff hoher Aufwand an Rechenzeit
Mehrwegbaum (multiway-tree)Bei 100 Knoten pro Seite fr 1 Million Elemente nur mehr log 100106 = 3 Seitenzugriffe Im schlimmsten Fall (lineare Entartung) aber immer noch 10 4 Zugriffe (10 6 / 100)E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
249
250
Seitenverwaltung (2)Knoten entsprechen Seiten (Blcke)besitzen eine Gre, Seitengre (Anzahl der enthaltenen Eintrge bzw. Speichergre in Bytes) reprsentieren die Transfereinheit zwischen Haupt- und Externspeicher Zur Effizienzsteigerung des Transfers wird die Gre der Seiten an die Blockgre der Speichertransfereiheiten des Betriebssystems angepat (Unit of Paging/Swapping)
Indexstruktur Indexstruktur besteht aus Schlsselteil (Index) und DatenteilGraphische Struktur
Index Hauptspeicherschreiben
Externspeicher
Daten
Seiten... lesen ...
Indexermglicht den effizienten Zugriff auf die DatenDisk
Datenenthalten die gespeicherte Information (vergleiche externe Knoten)E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
251
252
Knotenarten 2 KnotenartenIndexknotenErlauben effizienten Zugriff auf die externe Knoten Definieren die Intervallbereiche der Elemente, die im zugeordneten Teilbaum gespeichert sind. realisiert durch interne Knoten
4.7 B+-Baum Hhenbalanzierter (perfektbalanzierter) MehrwegbaumEigenschaftenExternspeicher-Datenstruktur Eine der hufigsten Datenstrukturen in Datenbanksystemen Dynamische Datenstruktur (Einfgen und Lschen) Algorithmen fr Einfgen und Lschen erhalten die Balanzierungseigenschaft Garantiert einen begrenzten (worst-case) Aufwand fr Zugriff, Einfgen und Lschen Der Aufwand fr die Operationen Zugriff, Einfgen und Lschen ist bedingt durch die Baumstruktur maximal von der Ordnung log n (O(log n)). Besteht aus Index und Daten Der Weg zu allen Daten ist gleich langVO Algorithmen und Datenstrukturen E. Schikuta
Externe KnotenEnthalten die zu verwaltende Information realisiert durch Blattknoten
Beispiel113 9 11
2525
3726 37
Indexknoten Externe KnotenE. Schikuta
VO Algorithmen und Datenstrukturen
253
254
Definition B+-Baum B+-Baum der Ordnung kalle Blattknoten haben die gleiche Tiefe (gleiche Weglnge zur Wurzel) die Wurzel ist entweder ein Blatt oder hat mindestens 2 Kinder jeder (interne) Knoten besitzt mindestens k und maximal 2k Schlsselwerte, daher mindestens k+1 und maximal 2k+1 KinderFr jeden in einem Knoten referenzierten Unterbaum gilt, dass die in ihm gespeicherten Elemente kleiner als die Elemente im rechten und grer als die Elemente im linken Unterbaum sind. Die Intervallgrenzen werden durch die Schlsselwerte bestimmt.
Beispiel B+-Baum B+-Baum der Ordnung 211 23 35 Anmerkung: Im weiteren werden Indexknoten grn und externe Knoten wei dargestellt
1
3
8
11
17
19
21
23
25
30
35
37
46
Jeder Indexknoten hat mindestens 2 und maximal 4 Grenzwerte und folglich mindestens 3 und maximal 5 Kinder Ausnahme ist die Wurzel Die Gre der externen Knoten ist eigentlich durch die Ordnung nicht definiert, wird aber blicherweise in der Literatur gleichgesetztVO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
255
256
Suche11 1 3 8 11 17 19 23 21 35 23 25 30 35 37 46
B+-Baum Einfgen (1) Fall 1: Einfgen Element 26Platz im externen Knoten vorhanden, einfaches Einfgen
Suchen11 11 17
Element 1723 35 11 11 x < 23 19 21 enthalten
Element 2723 35 23 nicht enthalten 25 30 1 3 8 11 17 11 23 21 35 23 x < 35
19
23
25
30
35
37
46
?11 23 35
Aufwand der SucheHhe eine B+-Baumes der Ordnung k mit Datenblockgre b (mind. b, max 2b Elemente) ist maximal log k+1(n/b).
Bereichsabfrage mglichSuche alle Element im Breich [Untergrenze, Obergrenze]VO Algorithmen und Datenstrukturen
Warum?
1
3
8
11
17
19
21
23
25
26
30
35
37
46
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
257
258
B+-Baum Einfgen (2) Fall 2: Einfgen Element 28Kein Platz mehr im externen Knoten (berlauf, Overflow), externer Knoten muss geteilt werden Split11 23 25 23 26 35 30 Splitten 23 25 26 28 30 11 11 11 1 3 8 17 19 21 23 25 23 28 28 26 35 30 35 37 46 1 3 8 17 28 neue Grenze 11 19 23 21 25 26 23
B+-Baum Einfgen (3) Fall 3: Einfgen Element 18Kein Platz mehr im Knoten und kein Platz mehr im darberliegenden Indexknoten, Indexknoten muss gesplittet werden28 28 35 30 35 37 46
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
259
260
B+-Baum Einfgen (4)Beim Splitten eines Indexknoten wird das mittlere Indexelement im darberliegenden Indexknoten eingetragen. Falls der nicht existiert (Wurzelsplit), wird eine neue Wurzel erzeugt
B+-Baum Einfgen (5) Der resultierende Baum hat folgendes Aussehen23 11 1 3 8 11 19 23 17 18 19 21 25 28 26 28 35
30 35 37 46
11 19 11 17 18
23
28
35 23 11 19 28 35
Unterscheidung des Splits fr externe und interne KnotenExterne Knoten: 2k+1 Elemente werden auf 2 benachbarte externe Knoten aufgeteilt Interne Knoten: 2k+1 Indexelemente (Schlsselwerte) werden auf 2 benachbarte Indexknoten zu je k Elemente aufgeteilt, das mittlere Indexelement wird in die darberliegende Indexebene eingetragen. Falls keine darberliegende Ebene existiert, wird eine neue Wurzel erzeugt, der Baum wchst um eine Ebene (Baum wchst von den Blttern zur Wurzel), der Zugriffsweg zu den Daten erhht sich um 1.E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
19
21
VO Algorithmen und Datenstrukturen
261
262
B+-Baum Lschen (1) Fall 1: Entfernen von Element 46Externer Knoten nach Lschen nicht unterbesetzt23 11 1 3 8 11 17 19 23 18 19 21 25 28 26 28 30 35 37 46 35 1 3 11 8 11 17 19 23 18 19 21 25
B+-Baum Lschen (2) Fall 2: Entfernen von Element 37Externer Knoten nach dem Lschen unterbesetzt23 28 26 28 30 35verschmelzen
35
37
23 11 1 3 8 11 17 19 23 18 19VO Algorithmen und Datenstrukturen
Element wird einfach aus dem externen Knoten entfernt28 25 26 28 30 35 37E. Schikuta
Element wird entfernt, ist Knoten unterbesetzt ( Underflow), Elementanzahl < k Umgekehrter Vorgang zum Split benachbarte Knoten werden verschmolzen (merge) 23 25 28 26 28 Interner Knoten unterbesetzt, muss ebenfalls mit Nachbarn verschmolzen werden.E. Schikuta
35
21
30
35
VO Algorithmen und Datenstrukturen
263
264
B+-Baum Lschen (3) Das Verschmelzen kann zur Verringerung der Baumhhe fhren, 2 Knoten werden zur neuen Wurzel verschmolzen, alte Wurzel wird entfernt.11 11 1 3 8 17 18 19 21 19 23 23 28 25 26 28 30 35 11 16 19 17 21 18 11 16 17
B+-Baum Lschen (4)AnmerkungDas Verschmelzen zweier Knoten kann zu einem berlauf (analog Einfgen) des neuen Knoten fhren, was einen nachfolgenden Split notwendig macht.
Beispiel: (Baumausschnitt)Lschen von 19...
Verschmelzen - berlauf... ...
Splitten...
19
21 18
...
18 17 21
...
21
11
16 18
Diese (Verschmelzen-Splitten) Sequenz erzeugt eine besseren Aufteilung der Datenstze zwischen benachbarten Knoten. Dies wird auch hier (siehe 2-3-4 Baum, eigentlich flschlicherweise) als Datensatzverschiebung (shift) bezeichnet.VO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
265
266
DatenblockverkettungIn der Praxis werden die Datenblcke linear verkettet, um einen effizienten, sequentiellen Zugriff in der Sortierreihenfolge der gespeicherten Elemente zu ermglichen11 11 1 3 8 17 18 19 21 19 23 23 28 25 26 28 30 35
Analyse B+ - Baum DatenverwaltungEinfgen und Lschen untersttzt
Datenmengeunbeschrnktabhngig von der Gre des vorhandenen Speicherplatzes
ModelleExternspeicherorientiert Untersttzung komplexer OperationenBereichsabfragen, Sortierreihenfolge
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
267
268
Analyse B+ - Baum (2) Ein Trie ist ein digitaler SuchbaumSpeicherplatz Split, Verschmelzen Zugriff Einfgen Lschen Sortierreihenfolge O(n) O(1) O(log n) O(log n) O(log n) O(n) A B C D E ...
4.8 Trie
Dient zur Speicherung von Strings (Verwaltung von Wrterbchern, Telefonbchern, Spellcheckern, etc.)Bezeichnung wird abgeleitet von retrieval, wird aber wie try ausgesprochen
Bei k Buchstaben ein k+1-ary Tree, wobei jeder Knoten durch eine Tabelle mit k+1 Kanten auf Kinder reprsentiert wird.Y Z $
Bitte beachten: Ordnung des Baumes ist konstanter Faktor!
SpezialformenPatricia Tree, de la Briandais TreeE. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
269
270
Beispiel Trie TrieTEN THE THEN THIN THIS TIN SING PIN WIN
Patricia Trie Practical Algorithm to Retrieve Information Coded in AlphanumericZiel ist die Komprimierung des Tries
P I N $ I N G $
S E N $ $ E H
T I I N N $ $ S $
W I N $ N $ PIN SING
PSTW EHI TEN N THENE. Schikuta VO Algorithmen und Datenstrukturen
WIN TIN N THIN S THISE. Schikuta
E
I $ THE
Einfgen SuchenVO Algorithmen und Datenstrukturen
271
272
de la Briandais Trie Listen-Reprsentation eines Triesstatt der Tabellen im Knoten lineare ListeKnoten besteht aus 2 Kinderkomponenten Nchster Wert - Nchster LevelP S T W
Analyse TrieDatenverwaltungEinfgen und Lschen untersttzt Struktur des Tries unabhngig von der Einfgereihenfolge
Datenmengeunbeschrnkt
ModelleHauptspeicherorientiert Untersttzung komplexer OperationenBereichsabfragen, Sortierreihenfolge
I
I
E
H
I
I
N
N
N
E
I
N
N
LaufzeitSpeicherplatz O(n) O(log n) O(log n) O(log n) O(n) Zugriff Einfgen Lschen Sortierreihenfolge
$
G
$
N
$
N
S
$
$
$
$
$
$
Bei der exakten Berechnung ist die Basis des Logarithmus von der Kardinalitt der Zeichenmenge, z.B. 26 (Grossbuchstaben), 2 (Bitstrings)E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
273
274
4.9 Priority Queues Datenstruktur zum wiederholten Finden und Entfernen des Elementes mit dem kleinsten (bzw. grten) Schlsselwert aus einer MengeAnwendungenSimulationssysteme (Schlsselwerte reprsentieren Exekutionszeiten von Ereignissen) Prozessverwaltung (Prioritten der Prozesse) Numerische Berechnungen (Schlsselwerte entsprechen den Rechenfehlern, wobei zuerst die groen beseitigt werden) Grundlage fr eine Reihe komplexer Algorithmen (Graphentheorie, Filekompression, etc.) Anmerkung: Im folgenden betrachten wir o.B.d.A. nur Priority Queues die den Zugriff auf die kleinsten Elemente untersttzen VO Algorithmen und Datenstrukturen E. Schikuta275
Operationen ConstructErzeugen einer leeren Priority Queue
IsEmptyAbfrage auf leere Priority Queue
InsertEinfgen eines Elementes
FindMinimumZurckgeben des kleinsten Elementes
DeleteMinimumLschen des kleinsten ElementesVO Algorithmen und Datenstrukturen E. Schikuta
276
Implementationsanstze Ungeordnete ListeElemente werden beliebig in die Liste eingetragen (Aufwand O(1)). Beim Zugriff bzw. Lschen des kleinsten Elementes muss die Liste abgesucht werden Aufwand O(n).
Priority Queue als Baumstruktur Balanzierte SchlsselbumeEinfgen im balanzierten Schlsselbaum vom Aufwand O(log n) Zugriff realisieren durch Verfolgen des uersten linken Weges im Baum (zum kleinsten Element) Aufwand O(log n)
Geordnete ListeElemente werden in der Reihenfolge ihrer Gre eingetragen (Aufwand O(n)). Zugriff bzw. Lschen konstanter Aufwand O(1)
Gnstigste Realisierung ber ungeordnete, komplette Schlsselbumemit der Eigenschaft, dass fr alle Knoten die Schlsselwerte ihrer Nachfolger grer (oder kleiner) sind
ProblemAufwand O(n) schwer zu vermeiden.VO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
277
278
Ungeordneter, kompletter Schlsselbaum Wertemenge3 6 5 10 9 116 5 3
Heap Datenstruktur Realisierung eines Heaps effizient durch ein FeldDie n Schlsselwerte des Heaps knnen als Folge von Elementen x0, x1, x2, xn-1 interpretiert werden, wobei die Position der einzelnen Knotenwerte im Feld durch folgende Regel bestimmt wird:Wurzel in Position 0, die Kinder des Knotens i werden an Position 2i+1 und 2i+2 gespeichert.
10
9
11
HeapBinrer kompletter Baum Wert jedes Knotens ist kleiner (grer) oder gleich den Werten seiner Nachfolgerknoten Wurzel enthlt kleinstes (grtes) Element Anordnung der Unterbume bez. Ihrer Wurzel undefiniert (ungeordneter Baum)VO Algorithmen und Datenstrukturen E. Schikuta
Beispiel61
3
0
5
2
30
61
52
103
94
115
10
3
9
4
11
5E. Schikuta
VO Algorithmen und Datenstrukturen
279
280
Zugriff Zugriff auf das kleinste Element mit konstanten Aufwand: O(1) Wurzel = erstes Element im Feld.3 6 10 30
Klasse Priority Queueclass PQ { int *a, N; public: PQ(int max) { a = new int[max]; N = -1; } ~PQ() { delete[] a; } int FindMinimum(){ return a[0]; } int IsEmpty() { return (N == -1); } void Insert(int); int DeleteMinimum(); };
5 9 11 103
61
52
94
115
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
281
282
Einfgen in einen HeapNeues Element an der letzten Stelle im Feld eintragen berprfen, ob die Heap Eigenschaft erfllt ist Wenn nicht, mit Elternknoten vertauschen und solange wiederholen bis erfllt Eintragen von 4(an der letzten Stelle im Feld) Aufwand: O(log n) jetzt ok! 4 9 11 5E. Schikuta VO Algorithmen und Datenstrukturen
Methode Insertvoid PQ::Insert(int v) { int child, parent; a[++N] = v; child = N; parent = (child - 1)/2; while(child != parent) { if(a[parent] > a[child]) { swap(a[parent], a[child]); child = parent; parent = (parent - 1)/2; } else break; // to stop the loop } }
3 6 10 9
Heap Eigenschaft nicht erfllt, daher mit Elternknoten vertauschen 5 11 4 10 6
3
VO Algorithmen und Datenstrukturen
E. Schikuta
283
284
Lschen aus einen HeapWurzel mit uerst rechten Blattknoten tauschen, diesen Blattknoten lschen, Wurzel in den Baum sinken lassen (mit kleinerem Kindknoten vertauschen), bis Heap Eigenschaft gilt. Aufwand: O(log n)3 6 10 9 5 6 10 9 11 4 10 11 4 5vertauschen, sinken lassen vertauschen
Methode DeleteMinimumint PQ::DeleteMinimum() { int parent = 0, child = 1; int v = a[0]; a[0] = a[N]; N--; while(child a[child+1]) child++; if(a[child] < a[parent]) { swap(a[parent], a[child]); parent = child; child = 2*child + 1; } else break; // to stop the loop } return v; }VO Algorithmen und Datenstrukturen E. Schikuta
5 6 10 9 4 6 9 11E. Schikuta
4 11 3lschen ok!
5
VO Algorithmen und Datenstrukturen
285
286
Analyse HeapDatenverwaltungEinfgen und Lschen untersttzt
Heaps und Heaps Bitte zu unterscheiden! Der Begriff Heap wird in der Informatik zur Bezeichnung verschiedener Konzepte verwendetHeap als Datenstruktur zur Speicherung von Priority Queues Heap als Speicherbereich zur Verwaltung (vom Benutzer selbst verwalteter) dynamisch allozierter Speicherbereiche Heap als Speicherform in Datenbanken
Datenmengeunbeschrnkt
ModelleHauptspeicherorientiert Nur simple Operationen
LaufzeitSpeicherplatz Zugriff (Minimum/Maximum) Einfgen Lschen O(n) O(1) O(log n) O(log n)
Der Heap stellt eine effiziente Basisdatenstruktur fr viele weitere darauf aufbauende Datenstrukturen dar
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
287
288
Was nehmen wir mit? BaumstrukturenNotation spez. Eigenschaften, von O(n) auf O(log n) Kapitel 5:
SuchbumeBinre Suchbume AVL-Bume 2-3-4 Bume B+-Baum Balanzierung
Vektoren
Trie Priority QueuesHeapVO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
289
290
5 Vektoren Ein Vektor (Feld, array) verwaltet eine fix vorgegebene Anzahl von Elementen eines einheitlichen Typs.Zugriff auf ein Element ber einen ganzzahligen Index (die Position im Vektor) Aufwand des Zugriffes fr alle Elemente konstant
5.1 Dictionary Ein Dictionary ist eine Datenstruktur, die nur die einfachen Operationen des Einfgens, Lschens und der Suche zur Verfgung stellt.Ein Elemente im Dictionay besteht meist aus einem Schlssel- (key) und einem Informationsteil (info). Beispiele sindWrterbcher, Namenslisten, Bestandslisten, etc.
x0
x1
x2
xn-2
Xn-1
Vektoren sind zur Realisierung von Dictionaries gut geeignet Strukturkey0 info0E. Schikuta VO Algorithmen und Datenstrukturen
MethodenHashing: Datenorganisationsform Sortieren: DatenreorganisationsmethodenVO Algorithmen und Datenstrukturen
key1 info1
key2 info2
Keyn-1 Infon-1E. Schikuta
291
292
Beispiele Wrterbuch(Ausschnitt)Schlssel computable computation compute computer Information berechenbar Berechnung (be)rechnen Rechenautomat
Operationen ConstructErzeugen eines leeren Dictionary
IsEmptyAbfrage auf leeres Dictionary
InsertEinfgen eines Elementes
BestandslisteSchlssel 1 4 17 25 Information CPU Bildschirm Tastatur Maus
DeleteLschen eines Elementes
LookUpAbfrage eines Elementes ber seinen Schlssel und liefern der InformationE. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
293
294
Klasse Dictionaryclass Dictionary { private: node { KeyType Key; InfoType Info; }; node *Dict; int NumberElements; public: Dictionary(int max) { Dict = new node[max]; NumberElements = 0; } ~Dictionary() { delete Dict; } void Insert(KeyType k, InfoType I); void Delete(KeyType k); InfoType LookUp(KeyType k); };VO Algorithmen und Datenstrukturen E. Schikuta
5.2 Hashing Hashing ist eine Methode Elemente in einer Tabelle direkt zu adressieren, in dem ihre Schlsselwerte durch arithmetische Transformationen direkt in Tabellenadressen (Indizes) bersetzt werdenMit anderen Worten, der Index (die Position in der Tabelle) eines Elements wird aus dem Schlsselwert des Elements selbst berechnet. Tabelle Schlssel Adresse (Index)0 1 2 3 4 5 6
Schlssel
Transformation
...m-1
VO Algorithmen und Datenstrukturen
E. Schikuta
295
296
Hashing, allgemein AnsatzMenge K von n Schlsseln {k0, k1, , kn-1} Hashtabelle T der Gre m Randbedingung: n >> m(Anzahl der mglichen Schlsselwerte viel grer als Pltze in der Tabelle)
Hashfunktion Gewnschte EigenschaftenEinfach und schnell zu berechnen. Elemente werden gleichmig in der Tabelle verteilt. Alle Positionen in der Tabelle werden mit gleicher Wahrscheinlichkeit berechnet. BeispieleModulo Bildung, Schlssel mod m Man sollte darauf achten, da m eine Primzahl ist, sonst kann es bei Schlsseltransformationen (Strings) zu Clusterbildungen (Anhufungen) durch gemeinsame Teiler kommen. Bitstring-Interpretation Teile aus der binren Reprsentation des Schlsselwertes werden als Hashwert herangezogen. TransformationstabellenVO Algorithmen und Datenstrukturen E. Schikuta
TransformationHash-Funktion h h: K {0, 1, m-1} Fr jedes j soll der Schlssel k j an der Stelle h(kj) in der Tabelle gespeichert werden. Der Wert h(K) wird als HashWert von K bezeichnet.Wahl der Hashfunktion (eigentlich) beliebig!VO Algorithmen und Datenstrukturen E. Schikuta
297
298
Beispiel HashingBestandslisteGre der Liste 7 Hashfunktion h(k) = k mod 7
Kollision Eine Kollision tritt auf, wenn zwei oder mehrere Schlsselwerte auf dieselbe Tabellenposition abgebildet (gehasht) werden.
DatenstzeSchlssel 1 4 17 25 Information CPU Bildschirm Tastatur Maus
1 mod 7 = 1 17 mod 7 = 3 4 mod 7 = 4
?
0 1 2 3 4 5 6
1 17 4
CPU Tastatur Bildschirm
Dies bedeutet, da fr 2 Schlssel ki, kj, mit ki kj, gilt h(ki) = h(kj).Diese Situation ist aber zu erwarten, da es viel mehr mgliche Schlssel als Tabellenpltze gibt (n >> m als Randbedingung). Die Hashfunktion h ist i.a. nicht injektiv, d.h. aus h(x)=h(y) folgt nicht notwendigerweise x=y.
25 mod 7 = 4 Position in der Tabelle schon besetzt
KollisionVO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
299
300
Kollisionsbehandlung Eine Kollision lst eine notwendige Kollisionsbehandlung aus.
5.2.1 Separate Chaining Beim Separate (Simple) Chaining wird die Kollisionsbehandlung mit linearen Listen bewerkstelligt.Kollidierende Schlsselwerte werden in einer linearen berlaufkette (Liste) ausgehend vom ursprnglich gehashten Tabellenplatz gespeichert. Wichtig: Element am Beispiel: Kopf der Liste0 1 2 3 4 5 6 4 Bildschirm 17 39 Tastatur Drucker 25 Maus 1 CPU
D.h., fr den kollidierenden Schlsselwert mu ein Ausweichsplatz gefunden werden.Manahmen zur Kollisionsbehandlung sind meist recht aufwendig und beeintrchtigen die Effizienz von Hashverfahren.
h(k) = k mod 7
einfgen, da sonst der Aufwand gegen O(n) wachsen kann!
der Kollisionspfad ist definiert durch die Ausweichpltze aller Elemente, die auf den gleichen Platz "ge-hasht" wurden Wir betrachten nun 2 simple Kollisionsbehandlungen Separate Chaining und Double HashingVO Algorithmen und Datenstrukturen E. Schikuta
Der Eintrag des Elementes (39, Drucker) fhrt zu einer Verlngerung der berlaufkette.VO Algorithmen und Datenstrukturen E. Schikuta
301
302
5.2.2 Double Hashing Beim Double Hashing wird bei Kollision eine zweite, von h unabhngige, Hashfunktion zur Bestimmung einer alternativen Position verwendet.berlauf auf Position a0 = h(k) Bestimmung einer alternativen Position mit Kollisionsfunktion g : K {1, m-1}, z.B. ai+1 = (ai + g(k)) mod m Beispiel Kollision Kh(k) = k mod 7 g(k) = letzte Ziffer von k mal 3 K a0 = 25 mod 7 = 4 a1 = (4 + (5*3)) mod 7 = 5 K a0 = 39 mod 7 = 4 a1 = (4 + (9*3)) mod 7 = 3 a2 = (3 + (9*3)) mod 7 = 2VO Algorithmen und Datenstrukturen
Linear Probing Spezialfall des Double Hashing Kollisionsbehandlung: Man verwendet den nchsten freien PlatzBei Erreichen des Tabellenendes sucht man am Tabellenanfang weiter Hashfuktionen: a0 = h(k), ai+1 = (ai + g(k)) mod mg(k) = 1
0 1 2 3 4 5 6
1 39 17 4 25
CPU Drucker Tastatur Bildschirm Maus
Beispiel25 mod 7 = 4 (4+1) mod 7 = 5 39 mod 7 = 4 (4+1) mod 7 = 5 (5+1) mod 7 = 6E. Schikuta VO Algorithmen und Datenstrukturen
0 1 1 17 4 25 39 CPU Tastatur Bildschirm Maus Drucker 2 3 4
K K K
K
5 6
E. Schikuta
303
304
Suchen und Lschen in Hashtabellen SuchenSolange eine Zieladresse durch ein Element belegt ist, und der gesuchte Schlsselwert noch nicht gefunden wurde, mu ber den Kollisionspfad weitergesucht werden.Separate Chaining: Verfolgen der linearen Liste Double Hashing: Aufsuchen aller mglichen Pltze der Kollisionsfkt.
Eigenschaften Generell fr Hashverfahren+ Aufwand beim Zugriff auf ein Element im besten Fall konstant, O(1), einfache Evaluation der Hashfunktion. - Kollisionsbehandlung aufwendig, volle Hashtabelle fhrt zu vielen Kollisionen, daher (Faustregel) nie ber 70% fllen. - Kein Zugriff in Sortierreihenfolge.
LschenSeparate Chaining: Entfernen des Listenelements Double Hashing: Positionen, an denen ein Element gelscht wurde, mssen gegebenenfalls mit einem speziellen Wert (wiederfrei) markiert werden, damit der entsprechende Kollisionspfad fr die restlichen Elemente nicht unterbrochen wird.VO Algorithmen und Datenstrukturen E. Schikuta
Separate Chaining+ Dynamische Datenstruktur, beliebig viele Elemente. - Speicherplatzaufwendig (zustzliche Zeigervariable).
Double Hashing+ Optimale Speicherplatzausntzung. - Statische Datenstruktur, Tabellengre vorgegeben. - Kollisionbehandlung komplex, wiederfrei Markierung beim Lschen.VO Algorithmen und Datenstrukturen E. Schikuta
305
306
Analyse Hashing DatenverwaltungEinfgen und Lschen untersttzt
Analyse Hashing (2)
Datenmengebeschrnktabhngig von der Gre der vorhandenen Hashtabelle
Speicherplatz Konstruktor Zugriff Einfgen Lschen
O(1) O(1) O(1) O(1) O(1)
ModelleHauptspeicherorientiert Untersttzung simpler Operationenkeine Bereichsabfragen, keine Sortierreihenfolge
gltig nur fr reines Hashverfahren ohne Kollisionsbehandlung
Bitte beachten: Aufwand von Hashing stark abhngig vom Kollisionsverfahren, geht aber oft gegen O(n)VO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
307
308
5.3 Dynamische Hash-Verfahren Dynamischen Hash-Verfahren versuchen im Falle von Kollisionen die ursprngliche Hashtabelle zu erweiternAnlegen von berlaufbereichen (z.B. lineare Listen) Vergrerung des Primrbereichs (ursprngliche Tabelle)Erfordert Modifikation der Hash-Funktion Ansatz: Familien von Hash-Funktionen h1: K addr1 ... hn: K addrn Wobei |addr1| < |addr2| < ... < |addrn| Ziel: Wechsel von addri auf addri+1 erfordert minimale Reorganisation der Hash-Tabelle (d.h. Umspeichern von Daten minimieren)VO Algorithmen und Datenstrukturen E. Schikuta
Hash-Funktionen Schema Simpler Ansatz|addri+1| = 2 * |addri| h(x) ist eine Hash-Funktion hi(x) seien die i least significant bits von h(x)
Somit gilthi+1(x) = hi(x) oder hi+1(x) = hi(x) + 2i Beispiel:addr2 = 0 .. 3, addr3 = 0 .. 7, h(x) = x 4 AdresswechselVO Algorithmen und Datenstrukturen
Wert 7 8 9 10 13 14 23 26
h(x) 7 8 9 10 13 14 23 26
binr 00111 01000 01001 01010 01101 01110 10111 11010
h 2(x) 11=3 00=0 01=1 10=2 01=1 10=2 11=3 10=2
h3(x) 111=7 000=0 001=1 010=2 101=5 110=6 111=7 010=2E. Schikuta
309
310
Dynamische Hashverfahren Two-Disk-Access PrinzipFinden eines Schlssel mit maximal 2 Platten Zugriffen
5.3.1 Linear Hashing W. Litwin 1980 Organisation der Elemente in Blcken (Buckets)Analog zu B-Bumen Blockgre b
Hashverfahren fr externe SpeichermedienLinear HashingVerzeichnisloses Hashverfahren Primrbereiche, berlaufbereiche
IdeeBei berlauf eines Blocks (Splitting) wird der Primr- und berlaufbereich um jeweils einen Block erweitert Primrbereich durch Hinzufgen eines Blocks am Ende der Hash-Tabelle berlaufbereich durch lineare Liste
Extendible HashingVerzeichnis mit binrer Expansion Primrbereiche
Bounded Index Size Extendible HashingVerzeichnis mit beschrnkter Gre Binre Expansion der BlckeVO Algorithmen und Datenstrukturen E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
311
312
Splitting und Suche Splitting wird Runden-weise durchgefhrtEine Runde endet, wenn alle ursprnglichen N Blocks (fr Runde R) gesplittet worden sindBlocks 0 bis NextToSplit-1 sind schon gesplittet Nchster Block zum Splitten ist definiert durch Index NextToSplit
Einfgen EinfgenSuche Block (hd oder hd+1) Falls Block vollFge Element in einen berlaufblock Neues Element in der linearen Liste Splitte Block NextToSplit und erhhe NextToSplit um 1
Aktuelle Rundennummer ist definiert durch d
SucheSuche nach Wert x
d=2, NextToSplit=1, b=32=000010 8=001000 17=010001 25=011001 28=011100 34=100010 50=110010
Beispiel: Einfgen von 6 (=000110)d=2, NextToSplit=1, b=3 000 8 01 17 25 10 34 50 2 11 100 28VO Algorithmen und Datenstrukturen
d=2, NextToSplit=2, b=3 000 8 001 17 25 10 34 50 2 11 100 28 101
000 8 a = hd(x); 01 17 25 if(a < NextToSplit) a = hd+1(x); 10 34 50 2 11 100 28
2=000010 8=001000 17=010001 25=011001 28=011100 34=100010 50=110010
6
VO Algorithmen und Datenstrukturen
E. Schikuta
E. Schikuta
313
314
Beispiel: linear HashingAktuelle hi(x) = h3(x)d=3, NextToSplit=0, b=3 000 001 010 011 100 101 110 111
BemerkungenDie Rundennummer d wird erhht, wenn das Splitting einmal durch ist, d.h.if(NextToSplit == 2d) { d++; NextToSplit=0; }
Einfgen: 16, 13, 21, 37d=3, NextToSplit=0, b=3 000 001 010 011 100 101 110 111 d=3, NextToSplit=1, b=3 0000 001 010 011 100 101 110 111 1000
8 17 25 34 50 2 28 5 5528=011100 34=100010 50=110010 55=110111
8 16 17 25 34 50 2 28 5 13 21 55 37 Split
16 17 25 34 50 2 28 5 13 21 55 8
ExpansionspolitikBei jedem berlauf Splitten nicht wirklich sinnvoll Salzberg schlgt vor Expansion durchzufhren, wenn seit der letzten Expansion genau L * b Datenstze eingefgt wurden L ist definiert durch den Belegungsfaktor, d.h L = Rohdatenvolumen / Volumen der Datenstruktur Lange berlaufketten werden in jedem Fall vermieden
2=000010 5=000101 8=001000 17=010001 25=011001
16=010000 13=001101 21=010101 37=100101
37 berlaufblockE. Schikuta
In der Praxis keine linearen Adressrume sondern Aufteilen des Primrbereiches auf mehrere Hash Dateien pro PlatteZuordnungssystem ber Verwaltungsblcke
VO Algorithmen und Datenstrukturen
VO Algorithmen und Datenstrukturen
E. Schikuta
315
316
5.3.2 Extendible Hashing Hash-Verfahren mit IndexR. Fagin, J. Nievergelt, N. Pippenger and H.R. Strong, 1979 Eigenschaften
Struktur und Suched=2, b=4 14 8 10 26 9 13 7 31 2314=01110 23=10111 26=11010 31=111111
IdeeWenn Primrbereich zu klein wird, Vergrerung durch Verdopplung Primrbereich wird ber Index T verwaltet Bei berlauf eines Blocks Split dieses Blocks und Verwaltung des Blocks durch Verdoppeln des IndexIndex ist viel kleiner als die Datei, daher Verdoppeln viel gnstiger
Index T Jeder Indexeintrag referenziert genau einen Datenblock Jeder Datenblock wird von genau 2k mit k 00 aus N0 Indexeintrgen referenziert 01 10 Die Anzahl der Indexeintrge, die den 11 Block referenzieren ist im Block lokal bekanntWird durch eine lokale Tiefe t verwaltet (Gegensatz globale Tiefe d fr die gesamte Hash-Tabelle) Anzahl der den Block referenzierenden Verzeichniseintrge entspricht 2d-t
2
2
Keine berlaufbereiche Suche
7=00111 8=01000 9=01001 10=01010 13=01101
Lokale Tiefe
Element x im Block T[hd(x)]VO Algorithmen und Datenstrukturen E. Schikuta VO Algorithmen und Datenstrukturen E. Schikuta
317
318
Einfgen Zwei Flle zu unterscheiden falls ein Block berluftt < d: mehrere Indexeintrge referenzieren diesen Block t = d: ein Indexeintrag referenziert diesen Block
Einfgen Fall 1: t < dVersuch den Split ohne Indexexpansion durchzufhrenNeuen Datenblock anfordern Aufteilung der Daten des berlaufenden Blocks nach ht+1 t = t + 1 fr alten und neuen Datenblock Falls Split wieder zu einem berlauf fhrt, wiederholen
Fall 1: t < dEinfgen von 66=00110 d=2, b=4 14 8 10 2600 01 10 111
Fall 2: t = dEinfgen von 15, 1915=01111 19=10011
9 13 7 31 23
2
7=00111 8=01000 9=01001 10=01010 13=01101 14=01110 23=10111 26=11010 31=11111
Einfgen von 6 (=00110)d=2, b=4 14 8 10 2600 01 10 111
d=2, b=400 01 10 11
8 14 6 10 26 9 13 7 31 23
2
2
9 13 7 31 23
2
2
2
2
2E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
319
320
Einfgen Fall 2: t = dErfordert eine Indexexpansion (Verdoppelung)Neuen Speicherbereich fr 2d zustzliche Referenzen anfordern Fr jedes T[x], fr das gilt x 2d: T[x] = T[x-2d] d = d+1
Einfgen Fall 2: t = d (2)Jetzt Fall 17=00111 15=01111 19=10011 23=10111 31=11111
Danach Rckfhrung auf Fall 1 Einfgen von 15 und 19d=2, b=400 01 10 11
d=3, b=4000 001 010 011 100 101 110 111
d=3, b=4 8 9 13 14 6 10 26 7 31 23 152
d=3, b=4 8 9 13 14 6 10 26 7 31 23 152
8 9 13 14 6 10 26 7 31 23 15
2
2
2
Indexexpansion
2
2
2
000 001 010 011 100 101 110 111
2
2
2
19
000 001 010 011 100 101 110 111
8 9 13 14 6 10 26 19 7 31 23 15
2
2
2
3 3
2
VO Algorithmen und Datenstrukturen
E. Schikuta
VO Algorithmen und Datenstrukturen
E. Schikuta