你好 Christoph,
Hashfunktion selber ist ein simples Schieberegister. Daran gäbe es
einiges zu mäkeln, ich gebe es hier aber unverändert wieder (zwar Typen
aufgelöst, aber nicht passend gemacht):uint32_t pearson_hash(const unsigned char *s, size_t length){
uint32_t hash = 0;
size_t n = length;while(--n > 0){
hash = (hash << 8) |
hash_seed[(unsigned char)hash ^ *s++];
}
return hash;
}
Hm, ich bin mir jetzt nicht sicher, aber eine gleichmaessige Verteilung
ist durch diese Funktion nicht gegeben, oder? Und wenn ich laenger
darueber nachdenke, Zufaelligkeit ist auch nicht wirklich gegeben...
Beispiel: k0-k9 muessten den gleichen Wert ergeben, da in diesem Fall nur
das k einbezogen wird, nicht jedoch die 0-9 (while(--n > 0)). Aendert
man das in while(n-- > 0), sieht es schon besser aus, aber die
gleichmaessige Verteilung ist immer noch nicht gegeben, oder?
再见,
CK