HashCode - johner.org: Home

Werbung
SOTE1­2016­10­17.notebook
October 17, 2016
Hash­Code
Anwendungsfälle
• Speichern von Passwörtern
• Integrität von Dateien (z.B. bei Downloads) prüfen
• Prüfziffer
Datei
public int hashCode(Object o) {
...
HashCode ("Prüfziffer") der Datei
}
1
SOTE1­2016­10­17.notebook
October 17, 2016
Eigenschaften von Hash­Funktionen
• Bildet ein Objekt auf eine Zahl ab
• Objekte haben eindeutige Hash­Codes
• Es kann mehrere Objekte mit gleichem Hash­Code geben
• Vom Hash­Code sollte man nicht auf das Objekt zurückschließen können
• Hash­Funktionen bilden unendlich viel Objekte auf endlich viele Zahlen ab
• Unterschiedliche oder geänderte Objekte (z.B. Dateien) sollen zu unterschiedlichen Hash­Codes führen
• Verteilt die Rückgabewerte möglichst gleichmäßig auf den zur Verfügung stehenden Wertebereich
Das wäre keine gleichmäßige Verteilung der Werte auf den Wertebereich
2
SOTE1­2016­10­17.notebook
October 17, 2016
Einfaches für Objekt, bei denen nur aus einer Zahl
Einfaches für Objekt, bei denen nur aus einem
der HashCode berechnet wird
String der HashCode berechnet wird
Modulo beschränkt den
künftig verwenden
Wertebereich auf 0...9
Berücksichtigt die Position im
String, um z.B. "otto" von "toto"
zu unterscheiden
3
SOTE1­2016­10­17.notebook
October 17, 2016
charAt liefert die entsprechenden Zahlen zurück z.B. 65 für "A"
4
SOTE1­2016­10­17.notebook
October 17, 2016
Ob beide Attribute für die Hash-Code-Berechnung
notwendig sind, ist eine Geschäftsentscheidung. Es
müssen nur die Primärschlüssel verwendet werden.
Niemals hashCode ohne equals (und umgekehrt) implementieren
5
SOTE1­2016­10­17.notebook
Bäume
October 17, 2016
Niveau 0
Niveau 2
Definitionen
• Elternelement: direkter Vorgänger (Richtung Wurzel)
• Kindelement: Direkte Nachfolger
• Blatt: Elemente/Knoten ohne Kindelemente
• Teilbaum: Knoten und alle seine direkten und indirekten Nachfolger
• Grad
> eines Knotens: Anzahl der direkten Nachfoger
> eines Baums: Maximaler Knotengrad (hier: 3)
• Binärbaum: Baum des Grad 2
• Vielwegbaum: Baum eines Grads > 2
• Tiefe (eines Knotens): Länge des Pfads bis zur Wurzel (z.B. hat 6 die Tiefe 2)
• Niveau: Alle Knoten gleicher Tiefe
• Höhe: Größte Tiefe +1 (hier 3)
6
SOTE1­2016­10­17.notebook
October 17, 2016
Binäre Suchbäume
In binären Suchbäumen finden sich im linken/rechten Teilbaum eines jeden Knotens nur Elemente, die kleiner/größer sind
7
SOTE1­2016­10­17.notebook
October 17, 2016
a) 10, 5, 14, 7, 18, 12, 6
5
10
5
6
14
7
6
b) 5, 6, 7, 10, 12, 14, 18
7
12
18
12
14
18
Ein zu einer linearen Liste "entarteter" binärer
Suchbaum
Reihenfolge des Einfügens ist entscheidend!
8
SOTE1­2016­10­17.notebook
October 17, 2016
Neue Begriffe
• Bilanz (eines Knotens): Differenz der Höhen des rechten und linken Teilbaums
• Höhenbilanzierter Baum: Baum, der nur Knoten mit Bilanzen ­1, 0 und 1 hat
• Vollständiger Baum: Baum, der auf jedem Niveau n < Höhe die maximale Knotenanzahl hat (voll außer unterstes Niveau)
• Vollen Baum: Baum, der auf jedem Niveau die maximale Knotenanzahl hat.
•
1, 2, 3
1, 2
1, 2
2
1
-1
10
5
14
7-1
6
12
0
0
0
18
0
1. Höhenbilanziert
2. Vollständig
3. Voll
nix
Bilanz: -2
nix
nix
-2
voll => vollständig => höhenbilanziert
9
SOTE1­2016­10­17.notebook
October 17, 2016
AVL Bäume
­ Adelson, Veliskii, Landis
­ := höhenbilanzierter binärer Suchbaum
Rezept (Algorithmus) zum Einfügen von Elementen in binäre Suchbäume
1) Einfügen wie bisher
2) Sofort auf Höhenbilanziertheit prüfen
3) Falls die Balance B < ­1 oder > 1, dann sofort umstrukturieren
> Linksrotation, falls B > 1
> Rechtsrotation, falls B < ­1
> Rechtslinksrotation, falls B > 1 und B(Nachfolgeknoten) ­1
> Linksrechtsrotation, falls B < ­1 und B(Nachfolgeknoten) +1
10
SOTE1­2016­10­17.notebook
October 17, 2016
Regel für Rechts­/Linksrotation: Falls ein Knoten nicht höhenbilanziert ist (hier M), wird er nach rechts/links geschoben. Ein möglicher rechter/linker Nachfolger (H) wird linker/rechter Nachfolger des rotierten Knotens
F
M
A
F
A
O
C
F
H
M
M
A
O
H
C
O
H
C
11
SOTE1­2016­10­17.notebook
October 17, 2016
5, 8, 2, 6, 10, 9
Rezept (Algorithmus) zum Einfügen von Elementen in binäre Suchbäume
1) Einfügen wie bisher
2) Sofort auf Höhenbilanziertheit prüfen
3) Falls die Balance B < ­1 oder > 1, dann sofort umstrukturieren
> Linksrotation, falls B > 1
> Rechtsrotation, falls B < ­1
> Rechtslinksrotation, falls B > 1 und B(Nachfolgeknoten) ­1
> Linksrechtsrotation, falls B < ­1 und B(Nachfolgeknoten) +1
Regel für Rechts­/Linksrotation: Falls ein Knoten nicht höhenbilanziert ist (hier M), wird er nach rechts/links geschoben. Ein möglicher rechter/linker Nachfolger (H) wird linker/rechter Nachfolger des rotierten Knotens
5
0
2
5
81
2
6
8
8
10 -1
9
2
6
10
9
5
2
6
10
9
-1
12
SOTE1­2016­10­17.notebook
October 17, 2016
13
Herunterladen