Kann man mit CRC32C als Basis eine "gute" Hash-Funktion konstruieren?

Da SSE 4.2 (Intel Core i7 & i5 Teile) eine CRC32-Anweisung enthält, erscheint es sinnvoll zu untersuchen, ob eine schnellere Allzweck-Hash-Funktion erstellt werden kann. GemäßDie Nur 16 Bits eines CRC32 sind gleichmäßig verteilt. Welche andere Transformation würde man anwenden, um das zu überwinden?

Aktualisiere Wie wäre es damit? Nur 16 Bits sind für einen Hashwert geeignet. Fein. Wenn Ihr Tisch 65535 oder weniger ist, dann großartig. Wenn nicht, führen Sie den CRC-Wert durch den Nehalem POPCNT-Befehl (Population Count), um die Anzahl der gesetzten Bits zu ermitteln. Verwenden Sie das dann als einen Index in einem Array von Tabellen. Dies funktioniert, wenn Ihre Tabelle südlich von 1-mm-Einträgen liegt. Ich wette, das ist billiger / schneller als die leistungsstärksten Hash-Funktionen. Nun dasGCC 4.5 hat eine CRC32-Eigenschaft, die sich leicht testen lässt ... wenn ich nur die Zeit hätte, daran zu arbeiten.

Davi

Antworten auf die Frage(10)

Ihre Antwort auf die Frage