Ik ben nu hashing aan het bestuderen, na eerst wat met int's te hebben gewerkt, om het te begrijpen. Ben ik nu bezig om woorden in een hash table op te slaan. Voor de hashcode heb ik de volgende functie:
Als je een beetje lange woorden wilt opslaan, wordt r al snel heel groot, zo groot dat r buiten zijn waarde bereik valt en bij 0 verder gaat rekenen. Mijn vraag is, kan dit kwaad? En zijn er andere oplossingen mogelijk? En zijn er andere methoden om de hashcode te berekenen van strings?
code:
1
2
3
4
5
6
7
8
9
10
11
| int Hash::hash_code(char *v)
{ int k=0;
unsigned long r=0, s=1;
while (k!=strlen(v))
{ r=r+*(v+k)*s;
s*=128;
k++;
}
return r%size;
} |
Als je een beetje lange woorden wilt opslaan, wordt r al snel heel groot, zo groot dat r buiten zijn waarde bereik valt en bij 0 verder gaat rekenen. Mijn vraag is, kan dit kwaad? En zijn er andere oplossingen mogelijk? En zijn er andere methoden om de hashcode te berekenen van strings?