2021-03-26
slides.com/jod/pt_14c
Docent: Jo Devriendt
Assistent: Ann Philips
Coördinator: Joost Vennekens
voornaam.achternaam@kuleuven.be
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Hashtabel is snel (bvb. tov zelf-balancerende zoekboom) indien er geen (of weinig) collisions optreden
Collisions hangen af van
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Veronderstel n key-waarde-paren en l de lengte van array
Bij hoge load factor, zorg dat l groter wordt!
Rehashing:
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
| Index | key-waarde |
|---|---|
| 0 | |
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 |
"barack", 59
"joe", 78
"donald", 74
"george", 74
"bill", 74
Rehash naar l=12
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
| Index | key-waarde |
|---|---|
| 0 | |
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 |
"barack", 59
"joe", 78
"donald", 74
"george", 74
"bill", 74
Rehash naar l=12
Herbereken buckets
Verplaats key-waarde-paren naar nieuwe bucket
| Naam | hash | hash%l (l=12) |
|---|---|---|
| bill | 35 | 11 |
| george | 57 | 9 |
| barack | 36 | 0 |
| donald | 50 | 2 |
| joe | 30 | 6 |
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
| Index | key-waarde |
|---|---|
| 0 | |
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 |
"barack", 59
"joe", 78
"donald", 74
"george", 74
"bill", 74
Rehash naar l=12
Herbereken buckets
Verplaats key-waarde-paren naar nieuwe bucket
| Naam | hash | hash%l (l=12) |
|---|---|---|
| bill | 35 | 11 |
| george | 57 | 9 |
| barack | 36 | 0 |
| donald | 50 | 2 |
| joe | 30 | 6 |
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
| key | hash |
|---|---|
| bill | 35 |
| george | 57 |
| barack | 36 |
| donald | 50 |
| joe | 30 |
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
| key | hash |
|---|---|
| bill | 2090113448 |
| george | 4286896414 |
| barack | 4086564937 |
| donald | 4181295159 |
| joe | 193496195 |
// gebaseerd op http://www.cse.yorku.ca/~oz/hash.html
unsigned int hash(char *s) {
unsigned int hash = 5381; // magic number
while (*s != '\0') {
hash = hash*33 + *s; // magic number
++s;
}
return hash;
}| key | hash |
|---|---|
| bill | 35 |
| george | 57 |
| barack | 36 |
| donald | 50 |
| joe | 30 |
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
| Naam | Leeftijd |
|---|---|
| bill | 74 |
| george | 74 |
| barack | 59 |
| donald | 74 |
| joe | 78 |
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021