Nell'implementazione di un filtro Bloom, l'approccio tradizionale richiede più funzioni hash indipendenti. Kirsch e Mitzenmacher hanno dimostrato che in realtà ne hai solo bisogno di due, e puoi generare il resto come combinazioni lineari.
La mia domanda è: qual è, davvero, la differenza tra due funzioni hash e una con il doppio dell'entropia?
Questo deriva dal guardare cosa realmente fai con l'output delle tue funzioni di hash: prenderai il tuo (diciamo) valore di hash a 64 bit e lo ridimensionerai alla dimensione del tuo vettore di bit, che è probabilmente significativamente inferiore a 2 64 . Questa è chiaramente una trasformazione che perde entropia (tranne nel raro caso in cui le dimensioni dell'hash e la capacità del filtro coincidano esattamente). Supponendo che il mio filtro abbia meno di 2 32 voci, cosa mi impedisce di dividere il mio valore di hash a 64 bit in due hash a 32 bit e di prendere combinazioni lineari di quelle? O utilizzarlo per seminare un PRNG?
In altre parole, quante informazioni devo effettivamente sapere su ogni elemento che inserisco in un filtro Bloom per garantire che il tasso di falsi positivi standard sia valido? O più in generale, qual è la relazione tra quanto riesco a distinguere gli elementi (quanti bit uso per descriverli) e come funziona il mio filtro Bloom?
Sembra che riesca a cavarmela con bit per una dimensione del filtro di , o equivalentemente per memorizzare elementi con probabilità falsa positiva ....