Hashing Inhoud Hashing Hashtable Hash function Collision Toepassing van klassieke ADT’s,...
-
Upload
brecht-beckers -
Category
Documents
-
view
214 -
download
0
Transcript of Hashing Inhoud Hashing Hashtable Hash function Collision Toepassing van klassieke ADT’s,...
Hashing
Inhoud
• Hashing
• Hashtable
• Hash function
• Collision
• Toepassing van klassieke ADT’s, algoritmes en runtime overwegingen.
Hashing
Hashing is een methode om een sleutelwaarde
van een object af te beelden op de positie in
een tabel.
Dit leidt tot een flitsend snelle methode om
objecten op te slaan en op te zoeken.
Hashtable
• Een hashtable is bijv. een array.
• De objecten bevinden zich verspreid in het array.
• Hashing is alleen snel indien slechts een gedeelte van het array wordt gebruikt. Vuistregel niet meer dan 50%. (boek 10 %)
Hash function
Hash function berekent voor een object
de index van het array-element.
Probleem: aantal mogelijke sleutelwaarden
groter dan het aantal array-elementen.
Hash function
Type hash functions:
• MappingBijv. sleutel f(12345678) = 678
• FoldingBijv. f(12345678) = 123 + 456 + 78
• ShiftingBijv. f(12345678) = 123 * 4 + 456 * 2 + 78
Hash function
Vrijwel altijd wordt de modulo-operatie
toegepast.
Voorbeeld: array bevat 1000 locaties.
index = berekendeWaarde % 1000.
Hash function
Gewenste eigenschap:
veel voorkomende waarden met grote overeenkomsten worden op verschillende indices afgebeeld.
Voorbeelden: Jansen, Janssen, Janse
Collision
Indien twee verschillende sleutelwaarden
worden afgebeeld op één index dan is er
sprake van collision.
Oplossingen:
• Hashing using buckets / chaining
• Lineair probing
Open hashing / Closed hashing
Open addressing is het vinden van een open/niet gebruikte lokatie in de hashtable.
Open hashing:
De hashtable bevat de objecten.
Open hashing enBuckets/Chaining/Closed hashing
Closed Hashing
A
bD
X X
b D
A
OpenHashing
Lineair probing
A
bD
X
Leidt tot clustering.
Alternatief: rehashing
Hashing using buckets
Het boek vermeldt dat een bucket een
onbeperkte capaciteit heeft.
Gebruikelijk is een beperkte capaciteit.
De overloop bucket heeft onbeperkte
capaciteit.
Toepassing 4.4
t c gag t c gag
Probleem: bepaal of een patroon met melementen meer dan één keer voorkomt
Aantal array elementen bevat enkele tien-duizenden elementen.
m is 5 á 10.
Toepassing
Oplossingen:
• 3 geneste for-statementsruntime : enkele dagen
• Sorteer x1 x2 … xm
x2 x3 … xm+1
… … … ….
xn-m … … xn -1
xn –(m-1) … xn-1 xn
Toepassing
Maak gebruik van hashing:
• Aan elke string van m karakters wordt een hashwaarde toegekend.
• Bij een collison wordt onderzocht of strings identiek zijn.
Runtime minder dan een dag.