Algorithmen Und Datenstrukturen SS07

download Algorithmen Und Datenstrukturen SS07

of 124

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