Hashing von Ganzzahlsätzen für Inklusionstests


10

Ich suche nach einer Hash-Funktion über Mengen H (.) Und einer Beziehung R (.,.), So dass, wenn A in B enthalten ist, R (H (A), H (B)). Natürlich muss R (.,.) Leicht zu überprüfen sein (konstante Zeit), und H (A) sollte in linearer Zeit berechnet werden.

Ein Beispiel für H und R ist:

  • , wobei k eine feste ganze Zahl und h (x) eine Hash-Funktion über ganze Zahlen ist.H(A)=xA1<<(h(x)modk)
  • R (H (A), H (B)) = ((H (A) & H (B)) == H (A))

Gibt es noch andere gute Beispiele? (gut ist schwer zu definieren, aber intuitiv, wenn R (H (A), H (B)), dann ist whp A in B enthalten).

Später bearbeiten :

  1. Ich suche eine Familie von Hash-Funktionen. Ich habe viele Sätze; 3 - 8 Elemente in jedem Satz; 90% von ihnen haben 3 oder 4 Elemente. Die Beispiel-Hash-Funktion, die ich angegeben habe, ist für diesen Fall nicht sehr gut verteilt.
  2. Die Anzahl der Bits von H (.) (In meinem Beispiel k), die klein sein sollten (dh H (.) Muss in eine ganze Zahl oder lang passen).
  3. Eine schöne Eigenschaft von R ist, dass wenn H (.) K Bits hat, R (.,.) Für (3 ^ k - 2 ^ k) / 4 ^ k Paare gilt, dh. für sehr wenige Paare.
  4. Bloom-Filter eignen sich besonders für große Sets. Ich habe versucht, BF für dieses Problem zu verwenden, aber die optimalen Ergebnisse wurden mit nur einer Funktion erzielt.

(Crosspost von Stackoverflow , ich habe keine gute Antwort erhalten)


"whp" über was? Gehen Sie davon aus, dass Ihre Eingaben aus einer bestimmten Verteilung stammen?
Jukka Suomela

Und suchen Sie wirklich eine einzelne, feste Hash-Funktion und keine Familie von Hash-Funktionen?
Jukka Suomela

@Jukka: Ich denke, er meint, wenn R (H (A), H (B)), dann schließen wir mit hoher Wahrscheinlichkeit, dass A eine Teilmenge von B ist. Die Wahrscheinlichkeit wird über zufällige Entscheidungen von A und B sowie übernommen interne Münzwürfe von H und R (falls vorhanden).
MS Dousti

Ich suche eine Familie von Hash-Funktionen. Meine Sets sind in der Regel klein (jeweils 3 - 8 Elemente; 90% von ihnen haben 3 oder 4 Elemente), sodass die von mir angegebene Beispiel-Hash-Funktion nicht sehr gut verteilt ist.
Alexandru

Eine schöne Eigenschaft von R ist, dass wenn H (.) N Bits hat, R (.,.) Für (3 ^ n - 2 ^ n) / 4 ^ n Paare gilt, dh. für sehr wenige Paare.
Alexandru

Antworten:


10

(Diese Antwort war ursprünglich in Kommentaren enthalten, aber ich verschiebe sie auf Sureshs Vorschlag hin zu einer separaten Antwort.)

kh1h2h3m23=1/8thEinsen. Hash jeder Satz auf das bitweise oder auf die Hashes seiner Bestandteile. Da Ihre Sets 3-8 Elemente enthalten, befinden sich die resultierenden Hashes in der Nähe der Hälfte. Dies ist vermutlich das, was Sie am besten möchten, um die Falsch-Positiv-Rate niedrig zu halten.

Gn,pdkm/8m/8


Dies ist besonders gut für große m (32 oder 64), wie Sie vorgeschlagen haben.
Alexandru

4

mkm=64k=4


k

h1h2h3m

Der Vorteil dieser Variante besteht nur darin, dass die Parallelität der Wortoperationen der meisten Computer besser genutzt wird.
Warren Schudy

Warren, du solltest das als Antwort posten. Es verdient einige Stimmen
Suresh Venkat

2
@Warren, @Suresh: Ich denke, es wäre sinnvoller , diese beiden eng verwandten Antworten zu kombinieren und dann die Kommentare zu löschen. Es wäre einfacher zu folgen, insbesondere da sich eine der Antworten auf Parameter bezieht, die in der anderen definiert sind.
Jukka Suomela
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.