Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Referat von Kim Schröer – Intelligente Dateisysteme WS13/14

Ähnliche Präsentationen


Präsentation zum Thema: "Referat von Kim Schröer – Intelligente Dateisysteme WS13/14"—  Präsentation transkript:

1 Referat von Kim Schröer – Intelligente Dateisysteme WS13/14
Hashing Streuwertfunktionen Referat von Kim Schröer – Intelligente Dateisysteme WS13/14

2 - Übersicht - Hashingfunktionen Ein einfaches Hashing-Schema
Kollisionen Ein einfacher Hashing-Algorithmus Progressiver Overflow Buckets Löschen von Datensätzen

3 produzieren immer dann eine Adresse, wenn ein Schlüssel gegeben wird
Hashfunktionen produzieren immer dann eine Adresse, wenn ein Schlüssel gegeben wird

4 Ein einfaches Hashing-Schema
h(k) = a Bsp: LOWELL Name ASCII (2 B.) Product address LOWELL x 79 = h(LOWELL) = 4 home address = 4 Funktion h(K) verwandelt einen Schlüssel K (Key) in eine Adresse. In dieser Adresse können nun Datensätze abgelegt und wieder aufgerufen werden. Hier als Bsp die Stadt: LOWELL. Der Schlüssel LOWELL wird durch die Hash-Funktion in die Adresse 4 verwandelt. Vorgehensweise: Die ersten 2 Buchstaben des Namens als 2 Zahlen aus der ASCII-Tabelle notieren, diese multiplizieren, die letzten 3 Ziffern des Ergebnisses ist die Adresse.

5 Ein einfaches Hashing-Schema

6 Kollisionen LOWELL Adresse = 4 OLIVER Adresse = 4  Synonyme
PROBLEM: Kollision => wenn 2 Schlüssel die gleiche Adresse haben

7 Kollisionen Optimal: eine perfekte Hashfunktion, bei der alle Kollisionen anhand eines Algorithmus gleichzeitig umgangen werden. Dieses ist jedoch fast unmöglich (bei 4000 DS und 5000 Adressen -> nur 1 aus 10^ vermeidet alle gleichzeitig). Also besser: auf eine akzeptable Menge reduzieren.

8 Kollisionen (Vermeidung)
Eine perfekte Hash-Funktion Kollisionen reduzieren: Verteilen der Datensätze Extra Speicher verwenden mehr als einen Datensatz einer einzelnen Adresse zuweisen Hierfür 3 Lösungsvorschläge. Zu 1.: mehr als 2 Anfangsbuchstaben verwenden; JO – häufig, XZ – selten  Der Algorithmus muss also noch willkürlicher verteilt werden. Zu 2.: wenige DS auf viele Adressen verteilen. Zu 3.: Bsp.: Wenn ein DS 8 Byte groß ist und wir eine Datei mit 512-Byte-DS kreieren, können wir bis zu 6 DS in jede Adresse packen (Buckets).

9 Ein einfacher Hash-Algorithmus
Schritt 1: LOWELL = L O W E L L |< Blanks >| Den Schlüssel in numerischer Form abbilden (mit ASCII). Es sei denn, es handelt sich eh um eine Zahl, dann diesen Schritt überspringen.

10 Ein einfacher Hashing-Algorithmus
Schritt 2: 76 79 | | | | | 32 32 = 33820 Bsp: Grenze von 19937: > > mod > 16448 > > mod > 4187 > > 7419 mod > 7419 > > mod > 10651 > > mod > 13883 Die Nummern werden getrennt und zusammengezählt. Wichtig: zum Rechnen Integervariablen verwenden! Problem: Für manche Mikrocomputer wäre diese Anzahl jedoch zu groß -> also mit mod-Operator rechnen.

11 Ein einfacher Hashing-Algorithmus
Schritt 3: Bsp: 100 Adressen (0-99) a = s mod n a = mod 100 a = 83 s – Summe von Schritt 2 n – Anzahl der Adressen in der Datei a – die Adresse, die erzeugt werden soll

12 Progressiver Overflow
Kollisionsauflösung Beim 4. Versuch hat der DS eine freie Adresse gefunden. Bei einem Key mit der Adresse 99 geht die Suche bei 0 weiter.

13 Progressiver Overflow

14 Buckets Adresse mit mehr als einem Datensatz
Überlauf von Datensätzen  viel seltener

15 Aufbau eines Buckets

16 Löschen von Datensätzen
Wichtig: Die Lücke, die nach dem Löschen bleibt, darf spätere Suchvorgänge nicht behindern und muss für neue DS zur Verfügung stehen. In Form von # werden sogenannte Tombstones eingefügt, damit die Suche nach einem Schlüssel nicht bei der Lücke endet.

17 Löschen von Datensätzen
Irgendwann sehr viele Tombstones Idee: Algorithmus überprüft, ob die DS, die nach einem Tombstone kommen, nicht doch in ihre Home-Addresse passen.  Auch die Suchlänge verkürzt sich

18 Andere Techniken zur Vermeidung von Kollisionen
Double Hashing Suche wird deutlich schneller bei Kollision: eine 2. Hashfunktion, die eine Zahl erzeugt, die teilerfremd zu der home-Adresse ist und das solange, bis eine freie Adresse gefunden wird.

19 Noch Fragen?!

20 Vielen Dank für die Aufmerksamkeit!

21 Bsp: einfacher Hash-Algorithmus
int Hash (char key[12], int maxAddress) { int sum = 0; for (int j = 0; j < 12; j += 2) sum = (sum * 100 * key[j] * key[j+1]) % 19937; return sum % maxAddress; } Die Funktion hash verwendet die folding and prime number division, um eine hash Adresse für einen 12 char string.


Herunterladen ppt "Referat von Kim Schröer – Intelligente Dateisysteme WS13/14"

Ähnliche Präsentationen


Google-Anzeigen