Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Algorithmen und Datenstrukturen 11 Stefan Ploner

5. Juli 2012

Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

1 Besprechung Blatt 10

Fragen 2 Hashing

Allgemein, Hashtablestruktur Sondierungsverfahren 3 Anonyme und innere Klassen

Anonyme Klassen Innere Klassen 4 Zirkul¨ are Arrays 5 Vorbereitung Blatt 11

Hinweise

Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Fragen

Fragen zu Blatt 10?

Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Allgemein, Hashtablestruktur

Zur Erinnerung: • Hashfunktion: Key → Wert (bzw. dessen Speicheradresse) • im Optimalfall wird jede Speicherzelle nur von einem Key verwendet, dadurch direkter Zugriff (O(1)) • da man nicht f¨ ur alle m¨ oglichen Keys eigenen Speicherplatz ¨ reservieren kann, muss es Uberschneidungen geben

Quelle: http://en.wikipedia.org/wiki/File:Hash_table_3_1_1_0_1_0_0_SP.svg

Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Allgemein, Hashtablestruktur

Kollisionsaufl¨osung mit Listen Hashtablestruktur: Array vom Typ des Listenelements (jedes Arrayelement entspricht einem Listenkopf)

Vorteile: • beliebig viele Elemente • Kollisionen beeinflussen Pl¨ atze anderer Hashwerte nicht

Nachteile: • zus¨ atzliche Listenstruktur notwendig • dadurch zus¨ atzlicher Aufwand

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

Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Allgemein, Hashtablestruktur

Kollisionsaufl¨osung mit Sondieren (open adressing, probing) Hashtablestruktur: Array, dass die Elemente selbst 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

Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Sondierungsverfahren

Sondierungsverfahren • es gibt verschiedenste Sondierungsverfahren

(linear, quadratisch, double hashing) • schlechte Sondierungsverfahren finden nicht alle freien Pl¨ atze

Beispiel: Hashtable mit L¨ange 9, Schrittweite 3 • jedes Element kann nur in 13 des Arrays platziert werden • freie Pl¨ onnen nicht genutzt werden atze in den restlichen 23 k¨ • tritt auf, wenn Schrittweite und Arrayl¨ ange nicht teilerfremd • Primzahlen als Arrayl¨ ange verhindern das (Schrittweite semicolon required! } Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Innere Klassen

Innere Klassen • Grundidee: Deklaration und Verwendung einer Klasse in einer

anderen (“¨außeren”) Klasse • alle von Klassen bekannten M¨ oglichkeiten sind f¨ ur innere

Klassen ebenso anwendbar (Vererbung, Konstruktoren, Methoden, ...) • typ. Beispiel: Listenelement-Klassen / Buckets im Hashtable

Verwendung an anderen Stellen im Code nur indirekt u ¨ber die (die innere Klasse enthaltende) ¨außere Klasse m¨ oglich. Meist will man das nicht und verhindert den Zugriff von außen komplett mit dem private-Modifikator.

Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Innere Klassen

public class IntegerArray { private int[] data; private class EvenIterator { // inner class private int next = 0; public boolean hasNext() { return (next < data.length); } public int getNext() { int res = data[next]; next += 2; return res; } } } Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Zirkul¨are Arrays

Queue in einem Array • statt den Elementen verschiebt man Start- und Endindex • Maximall¨ ange, da arraybasiert • Index des Folgeelements = (akt. Index + 1) % Arrayl¨ ange • damit man in O(1) hinzuf¨ ugen / entfernen kann, muss man

den Index des letzten / ersten Elements wissen • der jeweils andere Index l¨ asst sich mit der L¨ange berechnen

Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Hinweise

11.3: Puffer • wie ein Zirkul¨ ares Array • in vollen Puffern wird der ¨ alteste Eintrag u ¨berschrieben

¨ • beim Uberschreiben auf Gr¨ oße und Startindex aufpassen 11.4: verketteter Puffer • Startindex wird im verketteten Ring zu einem Elementzeiger • hinzuf¨ ugen geht in O(1)! wenn ihr die Liste traversiert, macht

ihr es falsch und komplizierter

Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Hinweise

11.1: Hashes • Tabellenformat einhalten! • bei mehrfachem Sondieren die Bucketnummern hintereinander

auflisten • zur b) ist keine mathematische Begr¨ undung notwendig

11.2: Hashes • put und put2 kann sich im internen Aufbau relativ stark

unterscheiden • put2 und put3 eher nicht

Algorithmen und Datenstrukturen 11

Stefan Ploner

Besprechung Blatt 10

Hashing

Anonyme und innere Klassen

Zirkul¨ are Arrays

Vorbereitung Blatt 11

Hinweise

Evaluation

Der Evaluationszeitraum endet am 07.07. Danke an alle die teilnehmen!

Algorithmen und Datenstrukturen 11

Stefan Ploner