Sto affrontando il problema di contare i visitatori unici di gruppi di luoghi.
Ecco la situazione:
Ho visitatori che possono visitare luoghi . Ad esempio, possono essere gli utenti di Internet che visitano le pagine Web oi clienti che visitano i ristoranti. Un visitatore può visitare quanti luoghi desidera e un luogo può essere visitato da più visitatori. Un visitatore può venire nello stesso posto più volte.
I luoghi appartengono a gruppi . Un gruppo può ovviamente contenere diversi luoghi e i luoghi possono appartenere a più gruppi.
Dato che, per ogni visitatore, possiamo avere un elenco di luoghi visitati, come posso avere il numero di visitatori unici per gruppo di posti?
Esempio: ho visitatori A, B, C e D; e ho posti x, y e z.
Ho questi elenchi di visite:
[
A -> [x,x,y,x],
B -> [],
C -> [z,z],
D -> [y,x,x,z]
]
Avere questo numero di visitatori unici per posizione è abbastanza semplice:
[
x -> 2, // A and D visited x
y -> 2, // A and D visited y
z -> 2 // C and D visited z
]
Ma se ho questi gruppi:
[
G1 -> [x,y,z],
G2 -> [x,z],
G3 -> [x,y]
]
Come posso avere queste informazioni?
[
G1 -> 3, // A, C and D visited x or y or z
G2 -> 3, // A, C and D visited x or z
G3 -> 2 // A and D visited x or y
]
Note aggiuntive:
- Ci sono così tanti posti che non è possibile memorizzare informazioni su tutti i possibili gruppi;
- Non è un problema se viene fatta l'approssimazione. Non ho bisogno di precisione al 100%. Avere un algoritmo veloce che mi dice che c'erano 12345 visite in un gruppo anziché 12543 è meglio di un lento algoritmo che indica il numero esatto. Diciamo che può esserci una deviazione di ~ 5%.
- Ho un numero finito di visitatori e un numero finito di posti. Non ho così tanti posti (circa 60 per ora, ma può arrivare a 200) ma ho molti visitatori (stimati a 50 milioni e questo numero potrebbe crescere fino a 200 milioni nei prossimi mesi).
Esiste un algoritmo o una classe di algoritmi che risolve questo tipo di problema?