Consideriamo che abbiamo un algoritmo che riceve un flusso di chiavi ipoteticamente lungo. Quindi genera un valore compreso tra 0 e 1 per ogni chiave, mentre la elaboriamo, per il recupero posteriore. Il set di input è abbastanza grande da non poterci permettere di memorizzare un valore per ogni chiave. La regola di generazione del valore è indipendente tra le chiavi.Strutture dati probabilistiche efficienti in termini di spazio per il recupero dei numeri
Ora, supponiamo che possiamo tollerare errore nella ricerca posteriori, ma vogliamo ancora ridurre al minimo la differenza direcuperate e valori originali (cioè asintoticamente nel corso di molti recuperi casuali).
Ad esempio, se il valore originale per un determinato tasto era 0,008, il recupero di 0,06 è molto meglio del recupero di 0,6.
Quali strutture dati o algoritmi possiamo utilizzare per risolvere questo problema?
I filtri Bloom sono la struttura dati più vicina a cui possa pensare. Si potrebbe quantizzare il range di output, usare un filtro di fioritura per ciascun bucket e in qualche modo combinare il loro output al momento del recupero per stimare il valore più probabile. Prima di procedere con questo percorso e reinventare la ruota, esistono strutture dati, algoritmi, approcci teorici o pratici noti per affrontare questo problema?
Sono idealmente alla ricerca di una soluzione che può parametrizzare il compromesso tra spazio e tassi di errore.
Possiamo fare intervallo di partizionamento e scrivere una funzione hash per mappare ogni numero su un intervallo specifico. I valori all'interno dell'intervallo possono essere controllati in base al fattore di errore. –