79
EINI LogWing/WiMa Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 17/18 Dr. Lars Hildebrand Fakultät für Informatik – Technische Universität Dortmund [email protected] http://ls14-www.cs.tu-dortmund.de Dr. Lars Hildebrand – EINI LogWing / WiMa 1

EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Embed Size (px)

Citation preview

Page 1: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

EINI LogWing/WiMa

Einführung in die Informatik für Naturwissenschaftler und Ingenieure

Vorlesung 2 SWS WS 17/18

Dr. Lars HildebrandFakultät für Informatik – Technische Universität Dortmund

[email protected]://ls14-www.cs.tu-dortmund.de

Dr. Lars Hildebrand – EINI LogWing / WiMa 1

Page 2: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Kapitel 5Algorithmen und Datenstrukturen

► Konstruktion von Datentypen: Arrays

► Algorithmen: Sortieren

► Unterlagen

► Dißmann, Stefan und Ernst-Erich Doberkat: Einführung in die objektorientierte Programmierung mit Java, 2. Auflage. München [u.a.]: Oldenbourg, 2002, Kapitel 3.4 & 4.1. (→ ZB oder Volltext aus Uninetz)

► Echtle, Klaus und Michael Goedicke: Lehrbuch der Programmierung mit Java. Heidelberg: dpunkt-Verl, 2000, Kapitel 4. (→ ZB)

► Gumm, Heinz-Peter und Manfred Sommer: Einführung in die Informatik, 10. Auflage. München: De Gruyter, 2012, Kapitel 2.7 – 2.8. (→ Volltext aus Uninetz)

Dr. Lars Hildebrand – EINI LogWing / WiMa 2

Thema

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

Page 3: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Begriffe

Spezifikationen, Algorithmen, formale Sprachen

Programmiersprachenkonzepte

Grundlagen der imperativen Programmierung

Algorithmen und Datenstrukturen

Felder

Sortieren

Rekursive Datenstrukturen (Baum, binärer Baum, Heap)

Heapsort

► Objektorientierung

► Einführung

► Vererbung

► Anwendung

Dr. Lars Hildebrand – EINI LogWing / WiMa 3

Übersicht

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

Page 4: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Dr. Lars Hildebrand – EINI LogWing / WiMa 4

Binärer Baum I

Definition: Binärer Baum

1. Der "leere" Baum ist ein binärer Baum mit der Knotenmenge .

2. Seien Bi binäre Bäume mit den Knotenmengen Ki ,

i = 1,2. Dann ist auch B = (w, B1, B2) ein binärer Baum mit der Knotenmenge

K = {w} * K1 * K2.

(* bezeichnet disjunkte Vereinigung.)

3. Jeder binäre Baum B lässt sich durch endlich häufige Anwendung von 1.) oder 2.) erhalten.

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

Page 5: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Dr. Lars Hildebrand – EINI LogWing / WiMa 5

Binärer Baum II

Sprech- und Darstellungsweisen (siehe Punkt 2):

Sei B = (w, B1, B2) binärer Baum:

w heißt Wurzel, B1 linker und B2 rechter Unterbaum.

B1 B2

w Wurzel

rechter

Unterbaum

linker

Unterbaum

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

Page 6: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Darstellung eines Beispiels nach Definition:

B1 = (k1, , (k2, (k3, , ), )).

6

Binärer Baum III

k1

k2

k3In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 7: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Dr. Lars Hildebrand – EINI LogWing / WiMa 7

Terminologie Binäre Bäume

Wurzel

innerer Knoten

Blatt

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

Page 8: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Dr. Lars Hildebrand – EINI LogWing / WiMa 8

Knotenmarkierter binärer Baum

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

► Definition: Sei M eine Menge.

(B, km) ist ein knotenmarkierter binärer Baum

(mit Markierungen aus M)

:

1. B ist binärer Baum (mit Knotenmenge K = K(B)).

2. km: K --> M Abbildung.

(Markierung/Beschriftung der Knoten k K mit Elementen m M)

Jedem Knoten wird ein Element aus der Menge M zugeordnet.

Alternative: Markierung von Kanten.

Page 9: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Beispiel

► M := Z, Z := Menge der ganzen Zahlen

► Damit existiert auf M eine Ordnung!

► "Übliche" Darstellung der Knotenbeschriftung km durch "Anschreiben" der Beschriftung an/in die Knoten.

Dr. Lars Hildebrand – EINI LogWing / WiMa 9

Knotenmarkierter binärer Baum

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

k1

k2

k3

24

1816

Page 10: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Ein Heap (Haufen) ist ein knotenmarkierter binärer Baum, für den gilt:

► Die Markierungsmenge ist geordnet.

► Der binäre Baum ist links-vollständig.

► Die Knotenmarkierung der Wurzel ist kleiner oder gleich der Markierung des linken bzw. rechten Sohnes (sofern vorhanden).

► Die Unterbäume der Wurzel sind Heaps.

► An der Wurzel steht das kleinste (eines der kleinsten) Element(e).

Dr. Lars Hildebrand – EINI LogWing / WiMa 10

Definition: Heap

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

Page 11: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Binärbaum

► Alle Ebenen, bis auf letzte, vollständig gefüllt

► Links-vollständig gefüllt

► Knotenmarkierung der Wurzel kleiner als die der Kinder

Dr. Lars Hildebrand – EINI LogWing / WiMa 11

Beispiel: Heap

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

Page 12: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Grobe Idee zum abstrakten Datentyp Heap:

► Datenstruktur

► siehe Folien vorher

► Operationen

► Initialisierung eines (leeren) Heaps

► Einfügen eines Elementes in einen Heap

► Entfernen des kleinsten Elementes/ eines der kleinsten Elemente aus dem Heap und Hinterlassen eines Rest-Heaps

► Zudem:

• Heap ist leer/voll?

• Drucken

• .....

12

Abstrakte Datentypen

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 13: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Darstellung: Binärer Baum ↔ Feld

13

Implementierung über Feld I

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

S[1]

S[2] S[3]

S[4] S[5] S[6] S[7]

S[8] S[9] S[10] S[11] S[12] S[13] S[14] S[15]

S[1] S[2] S[3] S[4] S[15]S[14]S[12] S[13]Array

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 14: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Beziehung Baum-Feld-Darstellung:

► Der Inhalt des i-ten Knotens in der Baumdarstellung wird im i-ten Feldelement abgelegt.

• Das bedeutet: Baum ebenenweise von links nach rechts eintragen.

Das Feldelement a[0] wird nicht verwendet!

► Beobachtung:

► Die Söhne des Knotens i in einem Heap haben die Knotennummern:

• 2i : linker Sohn

• 2i + 1 : rechter Sohn

• Beweis : induktiv

14

Implementierung über Feld II

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 15: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

In Tiefe i befinden sich die Schlüssel S[2i … 2i+1-1].

15

Implementierung über Feld III

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

S[1]

S[2] S[3]

S[4] S[5] S[6] S[7]

S[8] S[9] S[10] S[11] S[12] S[13] S[14] S[15]

S[1] S[2] S[3] S[4] S[15]S[14]S[12] S[13]

Ebene 0

Ebene 1

Ebene 2

Ebene 3

ArrayIn diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 16: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► linker Sohn von S[i] S[2i]

► rechter Sohn von S[i] S[2i+1]

► Vater von S[i]S[⌊i/2⌋]

16

Implementierung über Feld IV

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

S[3]

S[6] S[7]

S[8] S[9] S[10] S[11] S[12] S[13] S[14] S[15]

S[3] S[15]S[14]S[12] S[13]

Ebene 0

Ebene 1

Ebene 2

Ebene 3

Array

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 17: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Die Heapeigenschaft wird über die Inhalte definiert.

► Ein Feld a mit n ganzen Zahlen realisiert einen Heap,

► falls a[i/2] ≤ a[i] für alle i= 2, ...., n gilt.

► Der Wert des Vaters ist höchstens so groß, wie der der Söhne.

► Dabei ist "/" als ganzzahlige Division zu verstehen

(z.B. 5/2 = 2).

► Verzicht auf Floor( )-Funktion ⌊ ⌋ in der Notation.

► In einem (Minimum-)Heap, realisiert durch das Feld a, steht das kleinste Element immer in a[1].

► Der Maximum-Heap wird analog definiert.

17

Heap-Eigenschaft

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 18: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Ein Feld S[1 . . . n] ist ein Heap ab Position i, wenn der Teilbaummit Wurzel i ein Heap ist.

► Jedes Feld ist ein Heap ab ⌊n/2⌋ + 1, denn alle Einträge mit Indices ab ⌊n/2 ⌋ + 1 haben keine Kinder. D.h. der Teilbaum besteht nur aus einer Wurzel.

► Ist S[1 . . . n] ein Heap ab i, so ist S ebenfalls ein Heap ab 2i und2i + 1.

18

Beobachtungen

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

S[1]

S[2] S[3]

S[4] S[5] S[6] S[7]

S[8] S[9] S[10] S[11] S[12] S[13] S[14] S[15]

S[1] S[2] S[3] S[4] S[15]S[14]S[12] S[13]

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 19: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Eingabe:

► Heap a mit n Elementen, neues Element x

► Ergebnis:

► Heap a mit n+1 Elementen, x seiner Größe gemäß eingefügt.

► Vorgehensweise:

► Schaffe neuen Knoten n+1, setze a[n+1] = x.

► Füge also neuen Knoten mit Beschriftung x in den Heap (evtl. noch an falscher Stelle) ein.

► Sortiere an richtige Stelle ein.

19

Operation Einfügen: Algorithmus I

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 20: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

"An richtiger Stelle einsortieren" – Idee:

► einsortieren(k) :

► k bezeichnet Knotennummer.

► Ist k=1, so ist nichts zu tun.

► Ist k>1, so geschieht folgendes:

• falls a[k/2] > a[k],

– vertausche a[k/2] mit a[k],

– rufe einsortieren(k/2) auf

Einsortieren ist somit eine rekursive Funktion!

20

Operation Einfügen: Algorithmus II

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

Verletzung der Heap-Eigenschaft

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 21: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

21

Beispiel I

3

6

7 13

9 10 21 15

14

11

Ausgangssituation:

18

12

Dr. Lars Hildebrand – EINI LogWing / WiMa

20

Page 22: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

22

Beispiel II

Einfügen der Zahl 11 in den Heap. 11

Dr. Lars Hildebrand – EINI LogWing / WiMa

3

6

7 13

9 10 21 15

14

11

18

12

20

Page 23: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

23

Beispiel III

Linksvollständigkeit bietet nur eine Position:

11

Dr. Lars Hildebrand – EINI LogWing / WiMa

3

6

7 13

9 10 21 15

14

20

18

12

Page 24: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

24

Beispiel IV

Binärer Baum? Ja. Test auf Heap-Eigenschaften …

Dr. Lars Hildebrand – EINI LogWing / WiMa

3

6

7 13

9 10 21 15

1418

12

20 11

Page 25: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

25

Beispiel V

Binärer Baum? Ja. Test auf Heap-Eigenschaften …

Dr. Lars Hildebrand – EINI LogWing / WiMa

3

6

7 13

9 10 21 15

1418

12

20 1111

Page 26: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

26

Beispiel VI

Vater größer als Sohn Positionen vertauschen:

Dr. Lars Hildebrand – EINI LogWing / WiMa

3

6

7 13

9 10 21 15

1418

12

20 11

Page 27: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

27

Beispiel VII

Knoten mit Inhalt 18 ist an der richtigen Position.

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1411

12

20 18

3

Page 28: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

28

Beispiel VIII

Knoten mit Inhalt 11 an der richtigen Position? Rekursiver Aufruf!

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1411

12

20 18

3

Page 29: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

29

Beispiel IX

Binärer Baum? Ja. Test auf Heap-Eigenschaften …

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1411

12

20 18

3

Page 30: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

30

Beispiel X

Vater größer als Sohn Positionen vertauschen

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1411

12

20 18

3

Page 31: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

31

Beispiel XI

Knoten mit Inhalt 12 ist an der richtigen Position.

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1412

11

20 18

3

Page 32: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

32

Beispiel XII

Knoten mit Inhalt 11 an der richtigen Position? Rekursiver Aufruf!

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1412

11

20 18

3

Page 33: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

33

Beispiel XIII

Binärer Baum? Ja. Test auf Heap-Eigenschaften …

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1412

11

20 18

3

Page 34: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

34

Beispiel XIV

Binärer Baum? Ja. Heap? Ja.

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1412

11

20 18

3

Page 35: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

35

Beispiel XV

Fertig! Neuer Heap mit eingefügtem Inhalt 11.

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1412

11

20 18

3

Page 36: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

36

Beispiel – mit Array I

Ausgangssituation:

3 6 12 7 13 18 14 9 10 21 15 20 . . . .

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Dr. Lars Hildebrand – EINI LogWing / WiMa

1

2 3

4 5 6 7

8 9 10 11 12

3

6

7 13

9 10 21 15

14

11

18

12

20

Page 37: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

37

Beispiel – mit Array II

3 6 12 7 13 18 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

3

6

7 13

9 10 21 15

14

11

18

12

20

1

2 3

4 5 6 7

8 9 10 11 12

Einfügen der Zahl 11 in den Heap. 11

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Page 38: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

38

Beispiel – mit Array III

Linksvollständigkeit bietet nur eine Position.

3 6 12 7 13 18 14 9 10 21 15 20 11 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

11

3

6

7 13

9 10 21 15

14

20

18

12

1

2 3

4 5 6 7

8 9 10 11 12 13

Page 39: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

39

Beispiel – mit Array IV

Binärer Baum? Ja. Test auf Heap-Eigenschaften …

3 6 12 7 13 18 14 9 10 21 15 20 11 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

11

3

6

7 13

9 10 21 15

14

20

18

12

1

2 3

4 5 6 7

8 9 10 11 12 13

Page 40: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

40

Beispiel – mit Array V

Binärer Baum? Ja. Test auf Heap-Eigenschaften …

3 6 12 7 13 18 14 9 10 21 15 20 11 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

3

6

7 13

9 10 21 15

1418

12

20 1111

1

2 3

4 5 6 7

8 9 10 11 12 13

Page 41: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

41

Beispiel – mit Array VI

Vater größer als Sohn Positionen vertauschen

3 6 12 7 13 18 14 9 10 21 15 20 11 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

3

6

7 13

9 10 21 15

1418

12

20 11

1

2 3

4 5 6 7

8 9 10 11 12 13

Page 42: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

42

Beispiel – mit Array VII

Knoten mit Inhalt 18 ist an der richtigen Position.

3 6 12 7 13 11 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1411

12

20 18

31

2 3

4 5 6 7

8 9 10 11 12 13

Page 43: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

43

Beispiel – mit Array VIII

Knoten mit Inhalt 11 an der richtigen Position? Rekursiver Aufruf!

3 6 12 7 13 11 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1411

12

20 18

31

2 3

4 5 6 7

8 9 10 11 12 13

Page 44: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

44

Beispiel – mit Array IX

Binärer Baum? Ja. Test auf Heap-Eigenschaften …

3 6 12 7 13 11 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1411

12

20 18

31

2 3

4 5 6 7

8 9 10 11 12 13

Page 45: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

45

Beispiel – mit Array X

Vater größer als Sohn Positionen vertauschen

3 6 12 7 13 11 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1411

12

20 18

31

2 3

4 5 6 7

8 9 10 11 12 13

Page 46: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

46

Beispiel – mit Array XI

Knoten mit Inhalt 12 ist an der richtigen Position.

3 6 11 7 13 12 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1412

11

20 18

31

2 3

4 5 6 7

8 9 10 11 12 13

Page 47: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

47

Beispiel – mit Array XII

Knoten mit Inhalt 11 an der richtigen Position? Rekursiver Aufruf!

3 6 11 7 13 12 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1412

11

20 18

31

2 3

4 5 6 7

8 9 10 11 12 13

Page 48: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

48

Beispiel – mit Array XIII

Binärer Baum? Ja. Test auf Heap-Eigenschaften …

3 6 11 7 13 12 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1412

11

20 18

31

2 3

4 5 6 7

8 9 10 11 12 13

Page 49: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

49

Beispiel – mit Array XIV

Binärer Baum? Ja. Heap? Ja.

3 6 11 7 13 12 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1412

11

20 18

31

2 3

4 5 6 7

8 9 10 11 12 13

Page 50: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

50

Beispiel – mit Array XV

Fertig! Neuer Heap mit eingefügtem Inhalt 11.

3 6 11 7 13 12 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1412

11

20 18

31

2 3

4 5 6 7

8 9 10 11 12 13

Page 51: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► In das Feld heapFeld wird richtig einsortiert gemäß:

void einsortieren(int knotenNr) {

if (knotenNr > 1)

{

int vaterNr = knotenNr/2;

if (heapFeld[knotenNr] < heapFeld[vaterNr])

{

tausche(knotenNr, vaterNr);

einsortieren(vaterNr);

}

}

}

51

Code: Einsortieren

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 52: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Grundlegender Schritt für das Sortieren

► Idee einer Hau-Ruck-Lösung:

► Entfernen des kleinsten Elements.

► Baue einen neuen Heap ohne das erste Element auf.

(Z.B. durch sukzessives Einfügen der Elemente in einen neuen Heap.)

► Nachteil:

► Berücksichtigt nicht, dass vor dem Entfernen des kleinsten Elements ein Heap vorliegt.

► Idee einer effizienteren Lösung:

► siehe Diagramm auf der folgenden Folie

52

Entfernen des kleinsten Elements

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 53: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Wie behält man in diesem Fall einen Heap?

► Beobachtung:

► Jedes Blatt erfüllt die Heapbedingung.

► Allgemeinere Situation:

53

Erzeugung eines Heap

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

Wurzel erfülltdie Heap-Bedingung.

Unterbäume sollendie Heap-Bedingung Erfüllen.

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 54: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Grundlegender Schritt für das Sortieren

► Idee einer Hau-Ruck-Lösung:

► Entfernen des kleinsten Elements.

► Baue einen neuen Heap ohne das erste Element auf.

(Z.B. durch sukzessives Einfügen der Elemente in einen neuen Heap.)

► Nachteil:

► Berücksichtigt nicht, dass vor dem Entfernen des kleinsten Elements ein Heap vorliegt.

► Idee einer effizienteren Lösung:

► Verwende genau diese Information über die Unterbäume.

54

Entfernen des kleinsten Elements

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 55: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

55

Beispiel I

Entfernen der Wurzel (kleinstes Element):

3 6 11 7 13 12 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1412

11

20 18

31

2 3

4 5 6 7

8 9 10 11 12 13

Page 56: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

56

Beispiel II

Füllen der Wurzel mit dem „letzten“ Element:

. 6 11 7 13 12 14 9 10 21 15 20 18 . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1412

11

20 18

1

2 3

4 5 6 7

8 9 10 11 12 13

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Page 57: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

57

Beispiel III

Knoten mit Index 13 wird nicht mehr benötigt.

18 6 11 7 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1412

11

20

18

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

1

2 3

4 5 6 7

8 9 10 11 12

Page 58: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

58

Beispiel IV

Binärer Baum? Ja. Heap? …

18 6 11 7 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

6

7 13

9 10 21 15

1412

11

20

181

2 3

4 5 6 7

8 9 10 11 12

Page 59: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

59

Beispiel V

Knoten mit Index 2 ist der kleinere Sohn. Vater ist größer …

18 6 11 7 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

6

7 13

9 10 21 15

1412

11

20

181

2 3

4 5 6 7

8 9 10 11 12

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Page 60: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

60

Beispiel VI

Tausche Vater (Index 1) mit kleinerem Sohn (Index 2).

6 18 11 7 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

18

7 13

9 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 61: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

61

Beispiel VII

Knoten mit Index 1 und Inhalt 6 ist am richtigen Platz.

6 18 11 7 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

18

7 13

9 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 62: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

62

Beispiel VIII

Rekursiver Aufruf mit geändertem Sohn:

6 18 11 7 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

18

7 13

9 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 63: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

63

Beispiel IX

Binärer Baum? Ja. Heap? …

6 18 11 7 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

18

7 13

9 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 64: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

64

Beispiel X

Knoten mit Index 4 ist der kleinere Sohn. Vater ist größer …

6 18 11 7 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

18

7 13

9 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 65: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

65

Beispiel XI

Tausche Vater (Index 2) mit kleinerem Sohn (Index 4).

6 7 11 18 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

7

18 13

9 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 66: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

66

Beispiel XII

Knoten mit Index 2 und Inhalt 7 ist am richtigen Platz.

6 7 11 18 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

7

18 13

9 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 67: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

67

Beispiel XIII

Rekursiver Aufruf mit geändertem Sohn:

6 7 11 18 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

7

18 13

9 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 68: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

68

Beispiel XIV

Binärer Baum? Ja. Heap? …

6 7 11 18 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

7

18 13

9 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 69: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

69

Beispiel XV

Knoten mit Index 8 ist der kleinere Sohn. Vater ist größer …

6 7 11 18 13 12 14 9 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

7

18 13

9 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 70: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

70

Beispiel XVI

Tausche Vater (Index 4) mit kleinerem Sohn (Index 8).

6 7 11 9 13 12 14 18 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

7

9 13

18 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 71: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

71

Beispiel XVII

Knoten mit Index 4 und Inhalt 9 ist am richtigen Platz.

6 7 11 9 13 12 14 18 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

7

9 13

18 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 72: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

72

Beispiel XVIII

Rekursiver Aufruf mit geändertem Sohn:

6 7 11 9 13 12 14 18 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

7

9 13

18 10 21 15

1412

11

20

61

2 3

4 5 6 7

8 9 10 11 12

Page 73: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

73

Beispiel XIX

Der hat keine Nachfolger. Fertig.

6 7 11 9 13 12 14 18 10 21 15 20 . . . .

Dr. Lars Hildebrand – EINI LogWing / WiMa

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

7

9 13

18 10 21 15

1412

11

20

6

Page 74: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

74

Code: Heapify01 void heapify(int k) {

02 int lsNR = 2*k; // Nummer des linken Sohns

03 int rsNR = 2*k + 1; // Nummer des rechten Sohns

04 int selSohn; // Nummer des selektierten Sohns

05

06 if (lsNr <= anzahlKnoten && rsNr > anzahlKnoten) { // Es gibt

07 if (heapFeld[lsNr] < heapFeld[k] { // keinen

08 tausche(k, lsNr); // rechten

09 } // Sohn.

10 }

11 else if (rsNr <= anzahlKnoten) {

12 selSohn =(heapFeld[lsNr]<heapFeld [rsNr] ? lsNr : rsNr );

13 // Wähle den Sohn mit der kleineren Markierung aus.

14 // Bei Gleichheit wähle den rechten Sohn.

15

16 if (heapFeld[selSohn] < heapFeld[k]) { // Heap-

17 tausche (k, selSohn); // Bedingung

18 heapify(selSohn); // verletzt.

19 }

20 }

21 }

Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 75: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Aufgabe: Benutze Heap zum (effizienten) Sortieren.

► Heapsort arbeitet in zwei Phasen:

► Aufbau eines Heaps aus einem Feld

► Schrittweiser Abbau des Heaps:

• Auslesen des Wurzelelementes und Entfernen desselben

• Legen des "letzten" Elementes in die Wurzel

• Rekonstruktion der Heap-Bedingungfür diese restlichen Elemente

75

Anwendung: Heapsort I

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 76: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Warum?

Laufzeitenvergleich (mittlere Laufzeit)

zu sortierende naives Sortierverfahren Heapsort

Elemente

10 100 33

100 10.000 664

1.000 1.000.000 9.965

10.000 100.000.000 132.877

100.000* 10.000.000.000* 1.660.964*

1.000.000 1.000.000.000.000 19.931.568

10.000.000 100.000.000.000.000 232.534.966

* 100.000 Vergleiche pro Sekunde: 27 h vs. 16 sek

76

Anwendung: Heapsort II

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen Dr. Lars Hildebrand – EINI LogWing / WiMa

Page 77: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Artikel im EINI-Wiki:

→ Heap

→ Sortieren

• Heapsort

Dr. Lars Hildebrand – EINI LogWing / WiMa 77

Sortieren / Rekursive Datenstrukturen

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

Page 78: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

► Arrays

► Datenstruktur zur Abbildung gleichartiger Daten

► Deklaration

► Dimensionierung und Zuordnung von Speicher zur Laufzeit

► Zuweisung: ganzes Array, Werte einzelner Elemente

► Algorithmen auf Arrays: Beispiel Sortieren

► naives Verfahren: Minimum bestimmen, entfernen, Restmenge sortieren

► Heapsort: ähnlich, nur mit Binärbaum über Indexstruktur

Dr. Lars Hildebrand – EINI LogWing / WiMa 78

Zusammenfassung

EINI LogWing / WiMa

Kapitel 5

Algorithmen und Datenstrukturen

In diesem Kapitel:

• Prolog

• Arrays

• Sortieren

• Rekursive Datenstrukturen

Page 79: EINI LogWing/WiMa -  · • Prolog • Arrays • Sortieren • Rekursive Datenstrukturen. Begriffe Spezifikationen, Algorithmen, formale Sprachen ... (Baum, binärer Baum, Heap)

Dr. Lars Hildebrand – EINI LogWing / WiMa 79

Übersicht

Vielen Dank für Ihre Aufmerksamkeit!

Nächste Termine

► Nächste Vorlesung – WiMa 14.12.2017, 08:15

► Nächste Vorlesung – LogWing 15.12.2017, 08:15