Hi,
uint32_t pearson_hash(const unsigned char *s, size_t length) [...]
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?
Ja, genau, dieses Snippet ist nicht wirklich gut, die Idee dahinter (Random Seed) ist es jedoch durchaus. (Die Sonderfälle mit den Stellen 0 und 1 werden tatsächlich extra behandelt, wie ein ausführlicherer Blick in den Ghostscript Code darlegte).
Die Verteilung dieser Implementation ist wirklich nicht gut, da hier der Seed mittels einer XOR-Verknüpfung von LSB des Schlüssels und einem Zeichen des Inputs bestimmt wird.
Aber wie gesagt: nur die Implementation ist Mist, die Idee selber ist nicht schlecht.
so short
Christoph Zurnieden