• Keine Ergebnisse gefunden

Algorithmen und Datenstrukturen

N/A
N/A
Protected

Academic year: 2022

Aktie "Algorithmen und Datenstrukturen"

Copied!
12
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen und Datenstrukturen

– Wintersemester 2019 –

Kapitel 07:

Suchb¨aume

Fachbereich Informatik TU Kaiserslautern

Dozent: Dr. Patrick Michel

Folien urspr¨unglich von Prof. Dr. Adrian Ulges (Hochschule RheinMain)

14. Januar 2020

1

Suchb¨aume

Wir wollen B¨aume als dynamische Datenstruktur nutzen:

Werte einf¨ugen, suchen, l¨oschen...

Problem

Bisherige Bin¨arbaume waren ungeordnet.

Dann ist z.B. Suchen ineffizient (im Worst Case alle Knoten durchsuchen → O(n))!

L¨osung: Ordne die Knoten anhand eines Schl¨ussels.

Definition (Bin¨arer Suchbaum)

Ein Suchbaum ist ein bin¨arer Baum, in dem (1) alle Knoten ein Attribut key besitzen, und (2) f¨ur alle Knoten n gilt:

1. n.key > m.key f¨ur jeden Knoten m im linken Subbaum.

2. n.key < m.key f¨ur jeden Knoten m im rechten Subbaum.

< key > key

key

(2)

Beispiel

39 8

42

1 41

42 39

8

42

1 10

45

Links: Dies ist kein Suchbaum (41 /< 39, 42 /> 42 )

Rechts: Dies ist ein Suchbaum.

Anmerkungen

Aus der Definition folgt, dass alle Schl¨ussel eines Suchbaums paarweise verschieden sein m¨ussen. Es sind keine Duplikate erlaubt!

3

Suchb¨aume: Sets vs Maps

39 8

42

1 10

45

Set

39:

Marge

8:

Lisa

42:

Homer

1:

Maggie

10:

Bart

45:

Moe

Map

Suchbaum ohne Nutzdaten: Sets

Suchbaum = Menge (engl. “set”) von Schl¨usseln

Wir k¨onnen Elemente finden, einf¨ugen, entfernen...

Duplikate sind verboten.

Suchbaum mit Nutzdaten: Maps (aka “Dictionaries)

Gegeben den Schl¨ussel, suche den zugeh¨origen Wert

(3)

Implementierung: Beispiel

Klasse SearchTree

key ist hier ein einfacher int-Wert.

Schl¨ussel anderer Typen k¨onnten wir mit dem Interface Comparable implementieren.

value: zugeh¨origer Wert.

Wurzelknoten root.

Methoden zum Suchen, Einf¨ugen, L¨oschen.

5 class SearchTree <T> {

private class Node { int key;

T value; // optional, für map Node left;

Node right;

}

Node root;

T find(int key);

void insert(int key, T value);

boolean delete(int key);

}

Implementierung (als Map)

root

key value left

39

42

1 10

8

right marge

lisa

maggie bart

homer key value

left right left key valueright

key value

left right left key valueright

<

<

>

>

(4)

Outline

1. Suchbaum: Suche 2. Suchbaum: Einf¨ugen 3. L¨oschen in Suchb¨aumen

4. Das Java Collection Framework

7

Suchen im Suchbaum: Beispiel

Der Suchbaum nutzt die alphabetische Ordnung der Schl¨ussel.

Wir suchen den Wert “K” und finden ihn nicht (null-Knoten).

R

I U

D L Y

C

R

I U

D L Y

C null

(5)

Suchen im Suchbaum: Implementierung

Methode T find(int key)

Gegeben einen Schl¨ussel key, gebe den zugeh¨origen value zur¨uck (oder null, wenn kein Knoten mit Schl¨ussel key existiert).

Ansatz

Wandere im Baum nach unten

Gehe nach links/rechts, wenn der Suchwert kleiner/gr¨oßer dem

Knotenschl¨ussel ist.

Breche ab falls Schl¨ussel gefunden, oder Knoten gleich null.

9 Node findNode(int key) {

}

public T find(int key){

TreeNode t = findNode(key);

if (t == null) return null;

else

return t.value;

}

Outline

1. Suchbaum: Suche 2. Suchbaum: Einf¨ugen 3. L¨oschen in Suchb¨aumen

4. Das Java Collection Framework

(6)

Einf¨ugen im Suchbaum

Wie f¨ugen wir einen Schl¨ussel-Wert-Paar key/value ein?

Suche Knoten n mit Schl¨ussel key (siehe “Suche”, oben).

Fall 1: Schl¨ussel im Baum gefunden

Knoten n gefunden.

Ersetze einfach den zugeh¨origen Wert.

39:

Marge

8:

Lisa

Homer42:

Maggie1: 10:

Bart

45:

Moe 10:

Milhouse insert

Marge39:

8:

Lisa

42:

Homer

1:

Maggie

Moe45:

10:

Milhouse

11

Einf¨ugen im Suchbaum (cont’d)

Fall 2: Schl¨ussel nicht gefunden

Knoten n ist null.

H¨ange unter n’s Elternknoten einen neuen Knoten.

39:

Marge

8:

Lisa

42:

Homer

1:

Maggie 10:

Bart

45:

Moe 41:

Selma insert

39:

Marge

8:

Lisa

42:

Homer

1:

Maggie

45:

Moe

41:

Selma

10:

Bart null

(7)

Einf¨ugen im Suchbaum: Implementierung

Implementierung (1)

Suche richtigen Knoten n.

Merke den Elternknoten.

Falls schon vorhanden: Wert

¨uberschreiben.

39:

Marge

8:

Lisa

42:

Homer

1:

Maggie 10:

Bart

45:

Moe 10:

Milhouse insert

n parent

13 boolean insert(int key, T value) {

...

Einf¨ugen im Suchbaum: Implementierung

Implementierung (2) Wert nicht vorhanden

Neues Blatt unter parent einh¨angen (links oder rechts).

Spezialfall: Leerer Baum.

39:

Marge

8:

Lisa

42:

Homer

1:

Maggie 10:

Bart

45:

Moe 41:

Selma insert

null

parent

n

...

// n ist jetzt null (siehe oben)

(8)

Outline

1. Suchbaum: Suche 2. Suchbaum: Einf¨ugen 3. L¨oschen in Suchb¨aumen

4. Das Java Collection Framework

15

L¨oschen in Suchb¨aumen

L¨oschen im Suchbaum ist die schwierigste Operation. Warum?

Eventuell ist eine Reorganisation notwendig, um die Suchbaumeigenschaften zu erhalten.

Wir m¨ussen 3 verschiedene F¨alle abdecken!

Fall 1: L¨oschen eines Blatts

Einfachster Fall: Ein Blatt kann einfach entfernt werden.

39:

Marge

8:

Lisa

42:

Homer

1:

Maggie 10:

Bart

45:

Moe 10:

Bart delete

39:

Marge

8:

Lisa

42:

Homer

Maggie1:

45:

Moe

(9)

L¨oschen in Suchb¨aumen (cont’d)

Fall 2: L¨oschen eines Knotens mit einem Kind

39:

Marge

8:

Lisa

42:

Homer

1:

Maggie 10:

Bart

45:

Moe 39:

Marge

delete 42:

Homer

45:

Moe 8:

Lisa

1:

Maggie 10:

Bart

Auch noch leicht: Das Kind ersetzt den zu l¨oschenden Knoten.

17

L¨oschen in Suchb¨aumen (cont’d)

Fall 3: L¨oschen eines Knotens mit zwei Kindern

7:

Ralf Maggie1:

42:

Homer

8:

Lisa

45:

Moe 42:

Homer delete

10:

Bart

11:

Nelson

7:

Ralf Maggie1:

11:

Nelson

8:

Lisa

45:

Moe

10:

Bart

W¨ahle den gr¨oßten Knoten im linken Subbaum unter dem zu l¨oschenden Knoten.

Dieser Knoten ersetzt den zu l¨oschenden Knoten.

(10)

Outline

1. Suchbaum: Suche 2. Suchbaum: Einf¨ugen 3. L¨oschen in Suchb¨aumen

4. Das Java Collection Framework

19

Das Java Collection Framework (JCF)

Bibliotheken

Collections (wie Listen, Mengen, Dictionaries, ...) werden meist von Programmierumgebungen zur Verf¨ugung gestellt.

In Java: Das Java Collection Framework (JCF).

In C++: Die Standard Template Library (STL).

In C#: Das .NET Framework (System.Collections).

In Python: Typen bereits in Sprache integriert.

Das Java Collection Framework (JCF)

Collections: Listen, Mengen, Maps, ...

Schnittstellen und unterschiedliche Implementierungen

Einheitliches Iterator-Konzept (s.o.).

(11)

JCF: Aufbau

Collection

List Set

SortedSet

Map

SortedMap

Queue

HashSet TreeSet Interfaces

Klassen

Das JCF definiert zun¨achst Schnittstellen (keine Implemen- tierung).

Basis-Interface

java.util.Collection Verschiedene Spezialisierungen

java.util.List

java.util.Queue

java.util.Set

java.util.Map

21 public interface Collection<T> {

// Fügt Objekt hinzu boolean add(T o);

// Fügt alle Objekte in c hinzu

boolean addAll(Collection<? extends T> c);

// Entfernt Objekt boolean remove(T t);

// Entfernt alle Objekte in c

boolean removeAll(Collection<?> c);

// Test ob gleiches (equals()) // Objekt vorhanden

boolean contains(T t);

// Anzahl der Elemente int size();

// Test ob Collection leer boolean isEmpty();

// Iterator zur Navigation Iterator<T> iterator();

...

}

Sog. „wildcard“:

? = irgendeine Subklasse von T.

Merke:

List<String>

¹ List<Object>

JCF: Aufbau

Collection

List Set

SortedSet

Map

SortedMap

Queue

HashSet TreeSet Interfaces

Klassen

Beispiel: List

Sub-Interface von

Collection mit zus¨atzlichen Methoden.

Beispiel: add(int i, T o)

Index-Operationen: Einf¨ugen und holen von Objekten an Stelle i.

Macht bei Mengen (Sets)

public interface List<T> extends Collection<T> { // Fügt Objekt an Stelle i hinzu

boolean add(int i, T o);

// liefert Objekt an Stelle i zurück T get(int i);

...

}

(12)

JCF: Interface Set < T >

Collection

List Set

SortedSet

Map

SortedMap

Queue

HashSet TreeSet Interfaces

Klassen

Beispiel: Set

Modelliert Mengen

keine Duplikate

(Elemente ungeordnet).

Implementierungen

1. HashSet<T>: Hashing (sp¨ater)

2. TreeSet<T>: Verbesserte Suchb¨aume

(Red-Black-Trees, sp¨ater)

... 23

public class TreeSet<T> implements SortedSet<T>

{

// liefert erstes Element zurück T first();

...

}

References I

Referenzen

ÄHNLICHE DOKUMENTE

Ber¨ ucksichtigung der Reihenfolge n M¨ oglichkeiten f¨ ur das erste,. (n − 1) M¨ oglichkeiten f¨ ur

Für die Beurteilung von abweichenden Situationen wird angenommen, dass sich die Störwirkung in Abhängigkeit der Anzahl Stop &amp; Go Ereignisse verändert. Bei einer minimal

„ Siehe Bild: Für jeden Knoten sind alle Daten links kleiner und alle Daten rechts größer als die Daten des

Ungleichungen Blatt 2 Raach 2011 Birgit Vera Schmidt 13... Ungleichungen Blatt 3 Raach 2011 Birgit Vera

[r]

Da M (nach Voraussetzung) endlich viele Elemente enth¨ alt, ist h in h¨ ochstens endlich vielen Stellen in [a, b] unstetig und damit gem¨ aß obiger Aussage ¨ uber [a,

H¨ ohere Mathematik II f¨ ur die Fachrichtungen Elektroingenieurwesen, Physik und Geod¨ asie inklusive.. Komplexe Analysis und Integraltransformationen L¨ osungsvorschl¨ age