• Keine Ergebnisse gefunden

Bin¨ are Suchb¨ aume - Aufbau

N/A
N/A
Protected

Academic year: 2022

Aktie "Bin¨ are Suchb¨ aume - Aufbau"

Copied!
24
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen und Datenstrukturen 11

Stefan Ploner

17. Januar 2012

(2)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11

1 Besprechung Blatt 10 Fragen

2 Binary Search

Bin¨are Suche in Arrays

Bin¨are Suchb¨aume (Binary Search Tree) 3 Hashing

Kollisionsaufl¨osung 4 Vorbereitung Blatt 11

Hinweise Zirkul¨are Arrays

Anonyme und innere Klassen

(3)

Fragen zu Blatt 10?

(4)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Bin¨are Suche in Arrays

Zur Erinnerung: Binary Search sucht nach einem Element in einer sortierten Datenstruktur nach dem Divide and Conquer Prinzip.

Vorraussetzungen

Sortiert

Zugriff ¨uber Index in O(1)

⇒ Arrays

(5)

Algorithmus

Array leer→ Element nicht enthalten

sonst: gesuchten Wert mit mittlerem Element vergleichen

Element gleichgefunden

Element zu großgesuchtes Element liegt links

Element zu kleingesuchtes Element liegt rechts

beginne die Suche im eingegrenzten Array von Neuem

(6)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Bin¨are Suche in Arrays

Bei der bin¨aren Suche ist es egal, ob man Zahlen oder irgendwelche anderen Elemente durchsucht, f¨ur die eine feste Ordnung definiert ist. (→Comparable-Interface)

Problem

die Suche ist damit in logarithmischem Aufwand

aber: Einf¨ugen in sortiertes Array hat Aufwand O(n)!

(7)

Bin¨ are Suchb¨ aume - Aufbau

Baumstruktur, das heißt:

ein Wurzelelement (vgl. mit Head in Listen)

mehrere Kinder erlaubt (hier Bin¨arbaum →max. 2!)

wie bei Listen ist der Speicherverbrauch dynamisch von der momentanen Anzahl der Elemente abh¨angig.

Anordnung (¨uber Wert selbst oder “Key”):

“kleinere” Kinder links

“gr¨oßere” (und wenn erlaubt gleiche) Kinder rechts

Im folgenden sind keine doppelten Keys (bzw. Werte, wenn nach diesen sortiert wird) erlaubt.

(8)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Bin¨are Suchb¨aume (Binary Search Tree)

Suchen

Baum leer→ Element nicht enthalten

sonst: gesuchtes Element mit Wurzel vergleichen

Element gleichgefunden

Element zu großges. Element liegt in linkem Unterbaum

Element zu kleinges. Element liegt in rechtem Unterbaum

beginne die Suche im Unterbaum von Neuem

Im Prinzip eine bin¨are Suche auf einer verzeigerten Datenstruktur.

(9)

Einf¨ ugen

beginne mit einer Suche nach dem Element diese bricht an 2 Stellen ab:

Abbruch bei leerem Restbaum→ Element an diese Stelle einf¨ugen

Element gefunden - je nach Wunsch

Element verwerfen, da bereits enthalten

bei Sortierung ¨uber Keys k¨onnte ein Ersetzen sinnvoll sein

(10)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Bin¨are Suchb¨aume (Binary Search Tree)

L¨ oschen

(In der Hausaufgabe nicht ben¨otigt.)

beginne mit einer Suche nach dem Element

diese bricht an 2 Stellen ab:

Abbruch bei leerem Restbaum→ Element ist nicht enthalten

Element gefunden→ Element l¨oschen

Beim L¨oschen gibt es 3 M¨oglichkeiten, es darf kein Loch entstehen

Element ist ein Blatt → beim L¨oschen entsteht kein Loch, ok

Element hat ein Kind → Kind an Stelle des Elements h¨angen

Element hat zwei Kinder → Element durch ein innerstes Kind ersetzen (siehe n¨achste Folie)

(11)

L¨ oschen

Beispiel: L¨oschen eines Elements mit 2 Kindern

Die 6 und die 9 sind die “innersten” Kinder - alle anderen

Unterelemente sind sowohl von der Zahlenordnung als auch von der horizontalen Position gesehen weiter von der 7 (Mitte) entfernt.

Quelle: http://en.wikipedia.org/wiki/File:Binary search tree delete.svg

Daher bleibt die Suchbaumeigenschaft beim Ersetzen erhalten.

(12)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Kollisionsaufl¨osung

Zur Erinnerung:

eine Hashfunktion bildet Keys auf ihre Werte ab (bzw. auf deren Speicheradressen)

im Optimalfall wird jede Speicherzelle nur von einem verwendeten Key getroffen, dadurch direkter Zugriff

da man nicht f¨ur alle m¨oglichen Keys Speicherplatz anlegen kann, muss es ¨Uberschneidungen geben

(13)

Kollisionsaufl¨ osung mit verketteten Listen

Hashtablestruktur: Array aus Listen, erst in diese wird eingef¨ugt Vorteile:

beliebig viele Elemente

Kollisionen st¨oren andere Pl¨atze nicht Nachteile:

Zus¨atzliche Listenstruktur notwendig

Dadurch entsteht zus¨atzlicher Aufwand

Vorsicht: Entweder immer vorne oder immer hinten in die Listen einf¨ugen.

(14)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Kollisionsaufl¨osung

Kollisionsaufl¨ osung mit Sondieren (open adressing, probing)

Hashtablestruktur: Array, dass die Elemente direkt enth¨alt.

Vorteile:

keine zus¨atzliche Listenstruktur notwendig Nachteile:

max. so viele Elemente, wie Arrayelemente vorhanden sind

die ¨Uberpr¨ufung, ob ein Eintrag bereits enthalten ist, wird komplizierter

(15)

Sondierungsverfahren

es gibt verschiedenste Sondierungsverfahren (linear, quadratisch, double hashing)

am ¨uberschaubarsten ist lineares Sondieren

Bei schlechten Sondierungsverfahren kann es passieren, dass Elemente nicht eingef¨ugt werden k¨onnen, obwohl der Hashtable nicht voll ist.

Beispiel: Hashtable mit L¨ange 9, Schrittweite 3

2

3 der (m¨oglicherweise freien) Elemente werden nicht erreicht

bei linearem Sondieren tritt das Problem auf, wenn Schrittweite und Arrayl¨ange gemeinsame Teiler haben

mit Primzahlen als Arrayl¨ange kann das nicht passieren

(16)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Hinweise

11.1: Telefonbuch

Zum Rumspielen mit bin¨aren Suchb¨aumen Link auf dem Ubungsblatt oder Java-Applet hier¨

http://www.site.uottawa.ca/ stan/csi2514/applets/avl/BT.html (Haken bei AVL rausnehmen!) verwenden

(17)

11.2: Modifizierte Bin¨ arsuche

hier muss man die Idee verstehen, die Implementierung ist sehr einfach

Uberschrift beachten!¨

kann man durch Betrachten eines Elements eine komplette H¨alfte ausschließen?

Aufzeichnen von ein paar Sortierten Reihungen sehr hilfreich

(18)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Hinweise

11.3: RingQueue

die zugrunde liegende Datenstruktur muss ein Array sein

verzeigerte Datenstrukturen sind nicht erlaubt

vlt. hilft das Generic-Beispiel des letzten Foliensatzes

(19)

Zirkul¨ are Arrays

Index des Folgeelements = (akt. Index + 1) % Arrayl¨ange

damit man in O(1) hinzuf¨ugen / entfernen kann, muss man sich den Index des letzten / ersten Queueelements merken

Preisfrage: Wie merkt man, ob das Array voll ist?

wof¨ur die “voll”-Variable der Vorlesungsfolie gedacht ist, bleibt mir verborgen

(20)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Anonyme und innere Klassen

Anonyme Klassen

Grundidee: Deklaration und direkte Verwendung einer Klasse in einer Methode

die Klasse hat keinen Namen, aber eine Instanz

statischer Typ der Klasse ist wie von Vererbung bekannt eine beliebige Vaterklasse

das normalerweise in der Kindklasse durchgef¨uhrte Uberschreiben von Methoden wird hier direkt bei der¨ Verwendung durchgef¨uhrt

nur sinnvoll wenn nur an dieser einen Stelle Instanzen dieser Klasse angelegt werden sollen

Verwendung an anderen Stellen im Code nur ¨uber Methoden des statischen Typs der Instanz m¨oglich, wenn sie z.B. von einer

(21)

public Enumeration enumerate() {

return new Enumeration() { // anonymous class MyClass cur;

{ cur = head; } // replace constructor public boolean hasMoreElements() {

return (current != null);

}

public Object nextElement() { if (cur == null)

throw new NoSuchElementException();

Object res = cur;

cur = cur.getNext(); // declared in MyClass return res;

}

}; // semicolon required!

}

(22)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Anonyme und innere Klassen

Innere Klassen

Grundidee: Deklaration und Verwendung einer Klasse in einer anderen (“¨außeren”) Klasse

die innere Klasse ist nur in dieser Klasse bekannt (private!)

alle von Klassen bekannte M¨oglichkeiten sind f¨ur innere Klassen ebenso anwendbar (Vererbung, Konstruktoren, Methoden, ...)

Verwendung an anderen Stellen im Code nur indirekt ¨uber die (die innere Klasse enthaltende) ¨außere Klasse m¨oglich!

(23)

public class IntegerArray { private int[] data;

private class EvenIterator { // inner class private int next = 0;

public boolean hasNext() {

return (next <= data.length - 1);

}

public int getNext() { int res = data[next];

next += 2;

return res;

} } }

(24)

Besprechung Blatt 10 Binary Search Hashing Vorbereitung Blatt 11 Anonyme und innere Klassen

Evaluation

Der Evaluationszeitraum endet am 31.01.

Danke im vorraus.

Referenzen

ÄHNLICHE DOKUMENTE

Wird auf ein Element durch eine Operation zugegriffen, so wird dieses im Splay-Tree in geeigneter Weise zur Wurzel bef¨ ordert, um, sollten weitere Zugriffe auf dieses Element

Wird auf ein Element durch eine Operation zugegriffen, so wird dieses im Splay-Tree in geeigneter Weise zur Wurzel bef¨ ordert, um, sollten weitere Zugriffe auf dieses Element

Wird auf ein Element durch eine Operation zugegriffen, so wird dieses im Splay-Tree in geeigneter Weise zur Wurzel bef¨ ordert, um, sollten weitere Zugriffe auf dieses Element

Build a data structure for A so that for any axis-parallel rectangle B = xseg × yseg you can tell quickly for which objects in A you have (a.xkey, a.ykey) ∈ B.... Hierarchies of

Beweisen Sie, dass die beiden Wahrscheinlichkeitsverteilungen auf bin¨ aren Suchb¨ aumen aus Folie

observation: a lower bound of the number of leaves in a search tree with given height implies an upper bound of the height of a search tree with given number of

observation: a lower bound of the number of leaves in a search tree with given height implies an upper bound of the height of a search tree with given number of

Beobachtung: untere Grenze für Anzahl Blätter eines Suchbaums zu gegebener Höhe erlaubt Abschätzung der maximalen Höhe eines Suchbaums zu gegebener