Sto cercando una funzione hash sugli insiemi H (.) E una relazione R (.,.) Tale che se A è incluso in B, allora R (H (A), H (B)). Naturalmente, R (.,.) Deve essere facile da verificare (tempo costante) e H (A) deve essere calcolato in tempo lineare.
Un esempio di H e R è:
- , dove k è un numero intero fisso e h (x) una funzione hash su numeri interi.
- R (H (A), H (B)) = ((H (A) & H (B)) == H (A))
Ci sono altri buoni esempi? (buono è difficile da definire ma intuitivamente se R (H (A), H (B)) allora whp A è incluso in B).
Modifica successiva :
- Sto cercando una famiglia di funzioni hash. Ho molti set; 3 - 8 elementi in ogni set; Il 90% di essi ha 3 o 4 elementi. La funzione hash di esempio che ho fornito non è molto ben distribuita per questo caso.
- Il numero di bit di H (.) (Nel mio esempio, k) che dovrebbe essere piccolo (es. H (.) Deve rientrare in un numero intero o lungo).
- Una bella proprietà di R è che se H (.) Ha k bit allora R (.,.) È vero per le coppie (3 ^ k - 2 ^ k) / 4 ^ k, cioè. per pochissime coppie.
- I filtri Bloom sono particolarmente adatti per set di grandi dimensioni. Ho provato a usare BF per questo problema, ma i risultati ottimali erano con una sola funzione.
(crosspost da StackOverflow , non ho ricevuto una risposta abbastanza buona)