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
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!