60
8. DYNAMISCHE DATENSTRUKTUREN 2 HEAPS UND HASHTABELLEN Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen - Ma5hias Thimm ([email protected]) 1

Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm ([email protected]) 5 • Ein balancierter

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

8.DYNAMISCHEDATENSTRUKTUREN2HEAPSUNDHASHTABELLEN

AlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 1

Page 2: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

8.1.HEAPSAlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 2

Page 3: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Was ist ein “Heap”?

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 3

•  Zwei völlig verschiedene Definitionen von Heap: 1.  Ein größeres Gebiet im Hauptspeicher, aus

dem Programmierer Blöcke beanspruchen und wieder freigeben können

2.  Ein balancierter, linksbündiger Binärbaum in dem kein Knoten einen Wert hat, der größer ist als der Wert seines Elternknoten

•  Hier nutzen wir die zweite Definition

Datenstrukturen

Page 4: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Alternative Definition eines balancierten Binärbaumes

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 4

•  Terminologie: –  Jeder Knoten ist in einer Ebene platziert, der Wurzelknoten in

Ebene 0 –  Die Höhe eines Baumes ist die Distanz von seiner Wurzel zum

weitestentfernten Knoten plus 1 –  Ein Knoten ist tiefer als ein anderer Knoten, wenn seine Ebene

eine höhere Zahl hat •  Ein Binärbaum der Höhe h ist balanciert, wenn alle Knoten der

Ebenen 0 bis h-3 zwei Kinder haben

Balanciert Balanciert Unbalanciert

h-3 h-2 h-1

Datenstrukturen

Page 5: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Linksbündiger, balancierter Binärbaum

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 5

•  Ein balancierter Binärbaum der Höhe h ist linksbünding, wenn: – er 2k Knoten in der Ebene k hat

für alle k < h-1, und alle Blätter der Ebene h-1 sind so weit links wie möglich

Linksbündig Nicht linksbündig h-1

Datenstrukturen

Page 6: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Die Heap Eigenschaft

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 6

• Ein Knoten hat die Heap-Eigenschaft, wenn der Wert in dem Knoten so groß oder größer ist als die Werte seiner Kinder

•  Alle Blattknoten haben automatisch die Heap Eigenschaft

•  Ein Binärbaum ist ein Heap, wenn alle Knoten die Heap-Eigenschaft besitzen

12

8 3 Blauer Knoten hat die Heap-Eigenschaft

12

8 12 Blauer Knoten hat die Heap-Eigenschaft

12

8 14 Blauer Knoten hat die Heap-Eigenschaft nicht

Datenstrukturen

Page 7: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Anmerkung

•  EinHeapistkein(binärer)Suchbaum!•  DasSorJerkriteriumbeiSuchbäumenwar

–  DerWerteinesKnotensiststetsgrößeralsdieWertederKnoten,dieimlinkenTeilbaumliegen

–  DerWerteinesKnotensiststetskleineralsdieWertederKnoten,dieimrechtenTeilbaumliegen

•  DasSorJerkriteriumbeiHeapsist:–  DerWerteinesKnotensiststetsgrößer/gleichalsdieWertederKnoten,dieinbeidenTeilbäumenliegen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 7

Datenstrukturen

Page 8: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Vorgehensweise

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 8

•  Erst: wie transformiere ich einen Binärbaum in einen Heap?

•  Dann: wie transformiere ich einen Binärbaum in einen Heap nachdem er verändert wurde?

•  Schließlich: wie kann man diese Ideen nutzen, um einen Array zu sortieren?

Datenstrukturen

Page 9: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

siIUp(wörtlichübersetzt:„hochsieben“)

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 9

• Wenn ein Knoten nicht die Heap-Eigenschaft hat, dann kann man ihm diese verleihen, indem man seinen Wert mit dem Wert des größeren Kindes tauscht

•  Das nennt man “sifting up” •  Das Kind kann dadurch die Heap-Eigenschaft verlieren!

14

8 12 Blauer Knoten hat die Heap-Eigenschaft

12

8 14 Blauer Knoten hat die Heap-Eigenschaft nicht

Algorithmen

Page 10: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Konstruktion eines Heaps I

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 10

•  Ein Baum, der nur aus einem Knoten besteht, ist ein Heap

•  Wir konstruieren einen Heap durch inkrementelles Hinzufügen von Knoten: –  Füge den Knoten rechts von dem Knoten ein, der

am tiefsten und am weitesten rechts steht –  Wenn die tiefste Ebene voll ist, dann beginne eine

neue Ebene •  Beispiele:

Algorithmen

Page 11: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Konstruktion eines Heaps II

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 11

•  Jedesmal wenn wir einen Knoten hinzufügen, kann die Heap-Eigenschaft des Eltern-Knoten zerstört werden –  Sift-up!

•  Bei jedem Sift-up wächst der Wert des obenliegenden Knotens und das kann die Heap-Eigenschaft seines Elterknotens zerstören

•  Sift-up wird wiederholt im Baum nach oben

durchgeführt bis entweder –  man einen Knoten erreicht, dessen Werte nicht

ausgetauscht werden müssen, weil der Elterknoten immer noch größer ist als beide Kinder, oder

–  man den Wurzelknoten errreicht.

Algorithmen

Page 12: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Konstruktion eines Heaps III

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 12

8 8

10

10

8

10

8 5

10

8 5

12

10

12 5

8

12

10 5

8

1 2 3

4

Erinnerung:Immerlinksbündigeinfügen!

Algorithmen

Page 13: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Andere Kinder sind nicht betroffen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 13

•  Der Knoten mit Wert 8 ist nicht betroffen, da sein Elternknoten größer wird, nicht kleiner.

•  Der Knoten mit Wert 5 ist nicht betroffen, da sein Elterknoten größer wird, nicht kleiner. •  Der Knoten mit Wert 8 ist immer noch nicht betroffen. Obwohl sein Elternknoten kleiner wird, ist es immer noch größer als am Anfang.

12

10 5

8 14

12

14 5

8 10

14

12 5

8 10

Algorithmen

Page 14: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Ein Beispiel-Heap

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 14

•  Ein beispielhafter Binärbaum als Heap

• Den Binärbaum in einen Heap zu verwandeln, ändert nicht die Gestalt des Baumes; dieser Binärbaum ist balanciert und linksbündig, weil er am Anfang balanciert und linksbündig war.

19

14 18

22

3 21

14

11 9

15

25

17 22

Algorithmen

Page 15: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Entfernung des Wurzelknotens

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 15

•  Die größte Zahl ist im Wurzelknoten •  Nehmen wir an, wir entfernen die Wurzel:

• Wie können wir den Binärbaum so reparieren, dass er erneut balanciert und linksbündig ist?

•  Lösung: entferne den am weitesten rechts gelegenen Blattknoten in der größten Tiefe und benutze ihn als Wurzelknoten

19

14 18

22

3 21

14

11 9

15

17 22

11

Algorithmen

Page 16: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

DiereHeapMethodeI

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 16

• Der Baum ist balanciert und linksbündig, aber kein Heap • Aber: nur dem Wurzelknoten fehlt die Heap-Eigenschaft

• Wir können siftUp() auf dem Wurzelknoten ausführen • Anschließend hat genau ein Kind die Heap-Eigenschaft

verloren

19

14 18

22

3 21

14

9

15

17 22

11

Algorithmen

Page 17: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

DiereHeapMethodeII

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 17

•  Nun fehlt dem linken Kind des Wurzelknotens die Heap-Eigenschaft (der mit dem Wert 11)

•  siftUp() diesen Knoten •  Wiederum verliert genau ein Kind die Heap-Eigenschaft

19

14 18

22

3 21

14

9

15

17 11

22

Algorithmen

Page 18: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

DiereHeapMethodeIII

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 18

•  Nun fehlt dem rechten Kind des linken Kindes des Wurzelknotens die Heap-Eigenschaft (der mit dem Wert 11)

•  siftUp() diesen Knoten •  Jetzt könnte ein Kind die Heap-Eigenschaft verloren haben – das ist aber nicht der Fall, da es ein Blattknoten ist

19

14 18

11

3 21

14

9

15

17 22

22

Algorithmen

Page 19: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

DiereHeapMethodeIV

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 19

•  Der Baum ist wieder ein Heap, da jeder Knoten die Heap-Eigenschaft besitzt

• Der größte Werte ist wieder im Wurzelknoten • Wir können den Prozess wiederholen, bis der Baum leer ist • Dies liefert eine Folge der Werte, zuerst die größten, dann die

kleinsten

19

14 18

21

3 11

14

9

15

17 22

22

Algorithmen

Page 20: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Sortieren

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 20

•  Was haben Heaps mit Sortieren zu tun? •  Der interessante Teil:

–  Weil der Binärbaum balanciert und linksbündig ist, kann er leicht als Array repräsentiert werden

–  Alle Operationen auf Binärbäumen können als Operationen auf Arrays formuliert werden

–  Zum Sortieren:   Mache das Array zum Heap;   while das Array nicht leer ist {   entferne und ersetze die Wurzel;   reheap den neuen Wurzelknoten;

}

Algorithmen

Page 21: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Abbildung in einen Array

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 21

•  Bemerkungen: –  Das linke Kind von Index i ist bei Index 2*i+1

–  Das rechte Kind von Index i ist bei Index 2*i+2

–  Beispiel: die Kinder von Knoten 3 (19) sind 7 (18) und 8 (14)

19

14 18

22

3 21

14

11 9

15

25

17 22

25 22 17 19 22 14 15 18 14 21 3 9 11 0 1 2 3 4 5 6 7 8 9 10 11 12

Algorithmen

Page 22: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Entfernen und Ersetzen des Wurzelknotens

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 22

•  Der Wurzelknoten ist das erste Element im Array •  Der Knoten in der tiefsten Ebene, der am weitesten rechts gelegen

ist, ist das letzte Element •  Tausche die beiden ...

•  ...und tue so als würde das letzte Element im Array nicht mehr existieren – der neue letzte Indexeintrag ist nun 11 (9)

25 22 17 19 22 14 15 18 14 21 3 9 11 0 1 2 3 4 5 6 7 8 9 10 11 12

11 22 17 19 22 14 15 18 14 21 3 9 25 0 1 2 3 4 5 6 7 8 9 10 11 12

Algorithmen

Page 23: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Reheap und Wiederhole

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 23

•  Mache Wurzelknoten zum Heap-Knoten (Index 0, enthält die 11)...

•  ...und entferne und ersetze den Wurzelknoten wieder! • Aber: der höchste Indexwert hat sich geändert! • Wiederhole die Prozedur, bis der höchste Indexwert auf 0 liegt

– und das Array damit sortiert ist!

22 22 17 19 21 14 15 18 14 11 3 9 25 0 1 2 3 4 5 6 7 8 9 10 11 12

9 22 17 19 21 14 15 18 14 11 3 22 25 0 1 2 3 4 5 6 7 8 9 10 11 12

11 22 17 19 22 14 15 18 14 21 3 9 25 0 1 2 3 4 5 6 7 8 9 10 11 12

Algorithmen

Page 24: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

HeapSort:PseudoCode

Mache das Array zum Heap; While das Array ist nicht leer {   Entferne und ersetze den Wurzelknoten;   reheap den neuen Wurzelknoten; }

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 24

Mache das Array zum Heap; While das Array ist nicht leer {

 Entferne und ersetze den Wurzelknoten;  reheap den neuen Wurzelknoten;

}

Algorithmen

Page 25: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

HeapSortinJava

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 25

class HeapSort implements Sort{void execute(int[] f){

makeHeap(f);for(int i = f.length - 1; i > 0; i--){

swap(f,0,i);reHeap(f,i-1);

}}

void swap(int[] f, int x, int y){int tmp = f[x];f[x] = f[y];f[y] = tmp;

}

ErstelleHeapausArray

„EnYerne“Wurzel

RepariereHeap(bisIndexi-1)

Algorithmen

Page 26: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

HeapSortinJava:makeHeap

void makeHeap(int[] f){for(int i = 1; i < f.length; i++)

siftUp(f,i);}

void siftUp(int[] f, int idx){if(idx == 0)

return;int parent=(int)Math.floor((new Double(idx)-1)/2);if(f[parent] < f[idx]){

swap(f,idx, parent);siftUp(f,parent);

}}

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 26

FügeElementedemHeaphinzuundrepariereHeap(bo5om-up)

RekursionsendebeiWurzel

VergleicheWertdesKnotensmitElternknoten;tauschebeiBedarfundfahrebeimEltenknotenfort

Algorithmen

Page 27: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

HeapSortinJava:reHeapvoid reHeap(int[] f, int end){

int current = 0;while(current < end){

int childLeft = 2*current + 1;int childRight = 2*current + 2;if(childLeft > end)

return;if(childRight <= end){

if(f[current] >= f[childLeft] && f[current] >= f[childRight])return;

else if(f[childLeft] > f[childRight]){swap(f,current,childLeft);current = childLeft;

}else{swap(f,current,childRight);current = childRight;

}}else if(f[current] >= f[childLeft])

return;else{

swap(f,current,childLeft);current = childLeft;

}}

}

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 27

RepariereHeaptop-down

FallscurrentBla5ist,sindwirferJg

Heap-Eigenschaaerfüllt,nichtsmehrzutun

VergleichemitWertenderKinder,tauscheggfs.undfahretop-downfort

Heap-Eigenschaaerfüllt,nichtsmehrzutun

VergleichemitWertenderKinder,tauscheggfs.undfahretop-downfort

Algorithmen

Page 28: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Analyse

LemmaDerAufrufmakeHeap(f)machtausfeinenHeap,d.h.fürallei=0,...,kgiltf[i]≥f[2i+1]undf[i]≥f[2i+2],wobeik=(f.length-2)/2.Beweis:DurchIndukJonnachi=f.length-1:•  i=0:Einein-elemenJgesArrayiststetseinHeapnachDefiniJon

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 28

void makeHeap(int[] f){for(int i = 1; i < f.length; i++)

siftUp(f,i);}

void siftUp(int[] f, int idx){if(idx == 0)

return;int parent=(int)Math.floor((new

Double(idx)-1)/2);if(f[parent] < f[idx]){

swap(f,idx, parent);siftUp(f,parent);

}}

Analysen

Page 29: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Analyse

•  i-1->i:NachIndukJons-voraussetzungistf[0..i-1]einHeap.InderMethodesiaUp(f,idx)wirdzunächstdasneueElementmitseinemElterverglichen.Ggfs.werdendieWertegetauschtundeswirdbo5om-upfortgefahren.DaeinKnotendadurchhöchstenseinengrößerenWerterhältbleibtdieHeap-Eigenschaabestehen.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 29

void makeHeap(int[] f){for(int i = 1; i < f.length; i++)

siftUp(f,i);}

void siftUp(int[] f, int idx){if(idx == 0)

return;int parent=(int)Math.floor((new

Double(idx)-1)/2);if(f[parent] < f[idx]){

swap(f,idx, parent);siftUp(f,parent);

}}

Analysen

Page 30: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Analyse

LemmaIstf[0...i-1]einHeapbeidemmaximalfürdenWurzelknotendieHeap-Eigenschaaverletztist,soistnachreHeap(f,i-1)dasArrayf[0...i-1]einHeap.Beweis:InreHeapwirdzunächstderWurzelknotenmitseinenbeidenKindernverglichen.IstderWertderWurzelnichtkleineralsdieWertebeiderKinder,soterminiertdieMethode.Damitistf[0...i-1]einHeap.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 30

Analysen

Page 31: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Analyse

AndernfallswirdderWertderWurzelmitdemgrößtenWertseinerKindervertauscht,dieHeap-EigenschaaistdamitanderWurzelwiederhergestellt.AnschliessendwirditeraJvmitdemvertauschtenKindfortgefahren.NachIndukJonfolgtdann,dassf[0...i-1]amEndeeinHeapist.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 31

Analysen

Page 32: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Analyse

TheoremDerAlgorithmusheapSortlöstdasProblemdesvergleichsbasiertenSorJerens.Beweis:FolgtdirektausdenvorherigenbeidenLemmataundderBeobachtung,dassinjedemSchri5derheapSort-MethodedasgrößteElementandasEndedesArraysgetauschtwirdundnurnocheinumeinsverkleinertesArraybetrachtetwird.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 32

Analysen

Page 33: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Analyse

TheoremDerAlgorithmusheapSort(f)terminiertfürjedeEingabefnachendlicherZeit.BeweisDieHauptmethodeheapSortverfügtübereinekonstanteAnzahlanSchleifendurchläufen.InjedemrekursivenAufrufvonmakeHeapwirdderIndexechtverringert,beiIndex0istderRekursionsanfangerreicht.InreHeapwirddieVariablecurrentinjedemDurchgangummindestens1erhöhtundbeiErreichenvon„end“wirdabgebrochen.

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 33

Analysen

Page 34: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Analyse

TheoremDerAlgorithmusheapSorthateinenAufwandvonO(nlogn),sowohlfürdenbesten,schlechtesten,undmi5lerenFall.BeweisFürmakeHeapgilt:WirfügenjedendernKnotendazu

– AufjedenKnotenwirdsiaUpausgeführt–möglicherweisebiszumWurzelknoten

– DaderBinärbaumperfektbalanciertist,benöJgtsiaUp()aufeinemeinzelnenKnotenO(logn)Zeit

– Weilwirdasn-malmachen,benöJgenwirn*O(logn)vielZeit,d.h.O(nlogn)

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 34

Analysen

Page 35: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Analyse

Für

for(int i = f.length - 1; i > 0; i--){swap(f,0,i);reHeap(f,i-1);

}

gilt:•  DieSchleifewirdn-mal(genauern-1mal)durchlaufen,

weilwirimmereinendernKnotenenYernen•  EnYernenundErsetzendesWurzelknotensbeansprucht

O(1)vielZeit•  DeswegenbeträgtdieGesamtzeitn,fürdasEnYernen

undErsetzen(ohnereHeap)AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 35

Analysen

Page 36: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Analyse

•  UmreheapaufdenWurzelknotenauszuführen,müssenwireinenPfadvonderWurzelbiszueinemBla5knotenverfolgen(eventuellkönnenwirfrüherauwören)

•  DerBinärbaumistperfektbalanciert•  DeswegenistdieserPfadO(logn)lang

–  UndwirführennurO(1)OperaJonenaufjedemKnotenaus

–  DeswegenbenöJgtreheapO(logn)vielZeit•  Weilwirreheapinnerhalbeinerwhile-Schleifeausführen,

benöJgenwirhierfürO(nlogn)DieGesamtzeitistdeswegen:O(nlogn)+O(nlogn)=O(nlogn)AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 36

Analysen

Page 37: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

8.1HEAPSZUSAMMENFASSUNG

AlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 37

Page 38: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Zusammenfassung

•  Heaps sind –  binäre,linksbündige,balancierteBäume–  jederKnotendesBaumeserfülltdie„Heap“-Eigenschaa:

•  DerWertdesKnotensistnichtkleineralsdieWerteseinerKinder

•  Heaps implementieren eine Baumstruktur auf Arrays •  Anwendung HeapSort

–  Interpretiere Array als Baum und mache ihn zum Heap (Aufruf „siftUp“ für jeden Knoten)

–  Entferne die Wurzel (=maximales Element) und repariere den Heap („reHeap“)

–  Iteriere bis der Baum leer ist –  Aufwand O(n log n)

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 38

Page 39: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

8.2.HASHTABELLEN

AlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 39

Page 40: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Problemstellung

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 40

Gesucht:DynamischeDatenstrukturmitsehrschnellemdirektenZugriffaufElementeIdeeHashfunkJon:•  NutzeeinFeld0bisN-1(z.B.Array),einzelnePosiJonenoaals„Buckets“bezeichnet

•  HashfunkJonh(e)besJmmtfürElementediePosiJonimFeld–  h(e)istschnellberechenbar–  h(e)≠h(e‘)wenne≠e‘

Datenstrukturen

Page 41: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 41

•  Beispiel:Arrayvon0bis9,h(i)=imod10•  ArraynachEinfügenvon42und119

Vorteil vom Hashing: Anfragen der Form „Enthält die Datenstruktur das Element 42?“ sind schnell beantwortbar

Anmerkung: Hashtabellen verhalten sich zu binären Suchbäumen ähnlich wie BucketSort zu vergleichsbasierten Sortierverfahren

Datenstrukturen

Page 42: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Beispiel

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 42

•  Beispiel:Arrayvon0bis9,h(i)=imod10•  ArraynachEinfügenvon42und119

Was tun wenn „62“ eingefügt werden soll?

Datenstrukturen

Page 43: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Hashfunk]onen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 43

•  HängenvomDatentypderElementeundkonkreterAnwendungenab

•  FürIntegeroa h(i)=imodN

•  funkJonierti.A.gut,wennNeinePrimzahlist•  hängtmitMethodenzurErzeugungvonZufallszahlenzusammen

•  FürandereDatentypen:RückführungaufInteger–  Fließpunkt-Zahlen:AddiereManJsseundExponent

Datenstrukturen

Page 44: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Hashfunk]onen:Anforderungen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 44

•  DieHash-Wertesollengut„streuen“

•  EventuellvonBesonderheitenderEingabewerteabhängig–  Z.B.BuchstabendesAlphabetsinNamentauchenunterschiedlichhäufigauf

•  DieHash-Wertemüsseneffizientberechenbarsein–  KonstanterZeitbedarferfordert(nichtabhängigvonderAnzahldergespeichertenWerte)

Datenstrukturen

Page 45: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Ungüns]geHashfunk]onen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 45

•  Beispiel– MatrikelnummerninHashtabellemit100Einträgen–  Variantea:erstebeidenStellenalsHashwert→AbbildungaufwenigeBuckets

–  Varianteb:letztebeidenStellen→gleichmäßigeVerteilung

Datenstrukturen

Page 46: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Kollisionsstrategien

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 46

•  Verke5ungderÜberläuferbeiKollisionen

•  Sondieren(SucheneineralternaJvenPosiJon)–  LinearesSondieren–  QuadraJschesSondieren–  DoppeltesHashen,Sondierenmit„Zufallszahlen“,…

Algorithmen

Page 47: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Verke^ungderÜberläufer

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 47

•  Idee:alleEinträgeeinerArray-PosiJonwerdenineinerverke5etenListeverwaltet

Algorithmen

Page 48: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

LinearesSondieren

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 48

•  Idee:fallsIndexh(e)besetztist,versucheh(e)+1, h(e)+2,h(e)+3,…,h(e)+i,...

•  Varianten

–  h(e)+c, h(e)+2c,h(e)+3c,…fürKonstantec–  h(e)+1, h(e)-1,h(e)+2,h(e)-2,…

Algorithmen

Page 49: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

LinearesSondieren

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 49

Wie findet man nun die Antwort auf die Frage „Enthält die Struktur die Zahl 69“?

Algorithmen

Page 50: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Quadra]schesSondieren

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 50

•  Idee:fallsh(e)besetztist,versuche

h(e)+1, h(e)+4,h(e)+9,…,h(e)+i2,…

•  Variante: h(e)+1, h(e)-1,h(e)+4,h(e)-4,…

•  AnfälliggegenüberfalschgewähltemN(Feldgröße)–  BeispielN=16:SondierenistzyklischohnealleElementezutesten

–  WählePrimzahlenfürN

Algorithmen

Page 51: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Quadra]schesSondieren

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 51

Algorithmen

Page 52: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

AufwandbeimHashen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 52

•  BeigeringerKollisionswahrscheinlichkeit:–  SucheninO(1)–  EinfügeninO(1)–  LöschenbeiSondierverfahren:

•  nurMarkierenderEinträgealsgelöscht(O(1))oder•  „Rehashen“dergesamtenTabellenotwendig(O(n))

Analysen

Page 53: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

AufwandbeimHashen:verke^eteÜberläufer

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 53

•  Füllgrad(loadfactor)α=m/N–  mAnzahlgespeicherterElemente–  NAnzahlBuckets

•  ErfolgloseSuche(HashingmitÜberlaufliste):Θ(1+α)

•  ErfolgreicheSucheebenfallsindieserGrößenordnung

Analysen

Page 54: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

AufwandbeimHashen:Sondieren

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 54

•  WahrscheinlichkeitenbasierenaufFüllgradα–  Bucketbelegt:Wahrscheinlichkeitα –  BucketbelegtundsondiertesBucketauchbelegt:ungefährα2,etc.

•  ErfolgreicheSuchebesser,abergleicheGrößenordnung

1 + ↵+ ↵2 + ↵3 + . . . =1

1� ↵

Analysen

Page 55: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

HasheninJava

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 55

•  ZahlreichevordefinierteKlassenundMethodenzurUnterstützungvonHashing–  VordefinierteHashfunkJonenfürbeliebigeObjekte–  HashbasierteDatenstrukturen(Maps,Sets,etc.)

Datenstrukturen

Page 56: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

UnterstützungdurchJava

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 56

•  VordefinierteMethodezurBerechnungeinesHashwertes:int java.lang.Object.hashCode()

•  Kannüberschriebenwerden–  BeijedemAufrufgleicherWert–  GleicheObjektelieferngleichenHashwert

•  VergleicheEquals-Methode

•  Default-ImplemenJerunginJava:–  SpeicheradressedesObjektes–  Fürjava.lang.String:h(s)=s[0]*31(n-1)+s[1]*31(n-2)+!+s[n-1]

Datenstrukturen

Page 57: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Datenstruktureninjava.util

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 57

•  Hashtable<K,V>:Array-basierteImplemenJerungeinerHashtabellemitverke5eterListealsKollisionsbehandlung(keinSondiereninirgendeinerJavaklasse),RehashingundSteuerungderTabellengrößeundmaximalenloadFactor(effizientbis0.75)

•  HashMap<K,V>:ähnlichHashtable,erlaubtabernullalsSchlüssel

•  LinkedHashMap<K,V>:verwaltetzusätzlicheinedoppeltverke5eteListezumErhaltenderEinfügereihenfolge

Datenstrukturen

Page 58: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Datenstruktureninjava.util

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 58

•  HashSet<E>:HashMap-basierteImplemenJerungeinerMengemitO(1)AufwandfürLookup.

•  LinkedHashSet<E>:LinkedHashMap-basierteImplemenJerungeinerMenge.

•  IdentityHashMap<K,V>:Hash-TabelleunterVerwendungderGleichheitderObjektreferenzsta5derGleichheitderObjektwerte–  WeakHashMap<K,V>:Hash-Tabelle,ausderalsReferenzgelöschteElementeautomaJschgelöschtwerden.

Datenstrukturen

Page 59: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

8.2HASHTABELLENZUSAMMENFASSUNG

AlgorithmenundDatenstrukturen

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 59

Page 60: Algorithmen und Datenstrukturen 8. DYNAMISCHE ......Linksbündiger, balancierter Binärbaum Algorithmen und Datenstrukturen - Mahias Thimm (thimm@uni-koblenz.de) 5 • Ein balancierter

Zusammenfassung

•  Hashfunktion: Zuordnung eines Elements zu einem HashWert

•  Leseoperationen im besten Fall in O(1) möglich •  Kollisionsstrategien:

–  Verkettung der Überläufer –  Sondieren: linear, quadratisch

AlgorithmenundDatenstrukturen-Ma5hiasThimm([email protected]) 60