Wahrscheinlichkeit von 64-bit-Hash-Code-Kollisionen

Dem Buch Numerical Recipes bietet eine Methode zur Berechnung der 64-bit-hash-codes, um die Zahl der Kollisionen reduzieren.

Ist der Algorithmus gezeigt, bei der http://www.javamex.com/tutorials/collections/strong_hash_code_implementation_2.shtml und kopiert wird hier zur Referenz:

private static final createLookupTable() {
  byteTable = new long[256];
  long h = 0x544B2FBACAAF1684L;
  for (int i = 0; i < 256; i++) {
    for (int j = 0; j < 31; j++) {
      h = (h >>> 7) ^ h;
      h = (h << 11) ^ h;
      h = (h >>> 10) ^ h;
    }
    byteTable[i] = h;
  }
  return byteTable;
}

public static long hash(CharSequence cs) {
  long h = HSTART;
  final long hmult = HMULT;
  final long[] ht = byteTable;
  final int len = cs.length();
  for (int i = 0; i < len; i++) {
    char ch = cs.charAt(i);
    h = (h * hmult) ^ ht[ch & 0xff];
    h = (h * hmult) ^ ht[(ch >>> 8) & 0xff];
  }
  return h;
}

Meine Fragen:

1) gibt es eine Formel zur Abschätzung der Wahrscheinlichkeit von Kollisionen unter Berücksichtigung der sogenannte Geburtstags-Paradoxon?

2) wie hoch schätzen Sie die Wahrscheinlichkeit einer Kollision (ich.e zwei Schlüssel, hash auf den gleichen Wert)? Sagen wir mal mit 1.000-Tasten und mit 10.000 keys?

BEARBEITEN: umformuliert/korrigierte Frage 3

3) Ist es sicher davon ausgehen, dass eine Kollision von einer angemessenen Anzahl von Tasten (sagen wir, weniger als 10.000 keys) ist so unwahrscheinlich, so dass, wenn 2 hash-codes sind die gleichen, können wir sagen, dass die Tasten sind die gleichen ohne weitere überprüfung? z.B.

static boolean equals(key1, key2) {

  if (key1.hash64() == key2.hash64())
    return true;  //probability of collision so low we don't need further check

  return false;
}

Dies ist nicht für die Sicherheit, aber die Ausführungsgeschwindigkeit ist zwingend erforderlich, damit die Vermeidung von weiteren Prüfungen der Tasten Zeit sparen. Wenn die Wahrscheinlichkeit so gering ist, sagen wir weniger als (1 in 1 Milliarde für 100.000 Schlüssel) wird es wahrscheinlich akzeptabel sein.

TIA!

InformationsquelleAutor isapir | 2014-02-26

Schreibe einen Kommentar