Algoritmo che genera un gruppo di uomini e donne che sono interessati a tutti dal resto del genere

4

Nella mia app per appuntamenti, ho bisogno di compilare liste di uomini e donne in cui tutti gli uomini nella lista sono potenzialmente interessati a tutte le donne nella lista, e viceversa.

Cioè, in una lista di 10 uomini e 10 donne, ogni data donna corrisponde ai criteri stabiliti da tutti e 10 gli uomini e ogni dato uomo corrisponde ai criteri di tutte e 10 le donne. Non voglio uomini nel gruppo che non siano di interesse per tutte le donne, e viceversa.

I criteri sono molto semplici. Le proprietà per ogni persona sono:

  • Età
  • Interessi (array)
  • Intervallo di età del partner desiderato

Esempio : se Man1 è descritto come

  • 31
  • Cucina, tennis, matematica
  • 20, 31

Una donna 29 a cui piace il tennis e cerca un uomo tra x<=31 e y>=31 è una corrispondenza.

Ho pensato a come implementarlo, ma è diverso da qualsiasi semplice raccolta / manipolazione dei dati che abbia mai fatto. Il motivo è perché piuttosto che essere una singola query (cioè ottenere tutte le persone in cui gender=female AND age>=low & age<=hight ecc.) La query deve essere ricontrollata ogni volta che viene aggiunta una nuova persona. Cioè, ogni volta che un nuovo uomo o una donna vengono aggiunti alla lista, tutte le persone successive devono essere controllate anche contro di loro (perché non voglio aggiungere un uomo che una o più donne non trovino interessante).

Qualcuno ha qualche idea su una strategia per implementare questo algoritmo.

Per inciso, sto usando MongoDB, quindi, se per te è comodo, sarebbe bello parlare in questi termini.

Grazie mille in anticipo!

    
posta CodyBugstein 22.03.2015 - 12:16
fonte

2 risposte

1

In altre parole, l'intero database dovrebbe subire alcune importanti reindicazioni (ricalcolare tutte le partite) ogni volta che viene aggiunta una nuova persona.

La strategia in questi casi è di mantenere un dataset più piccolo, memorizzato nella cache ("delta"), in questo caso contenente nuove persone aggiunte durante il giorno, che vengono fuse nel database ogni giorno - potrebbe essere di notte, dove il server non è così occupato.

Come funzionerebbe nel tuo caso?

Ogni nuova persona viene aggiunta al delta, una sorta di sala d'attesa. Per queste persone, possiamo calcolare immediatamente le loro "prime 10 partite".

I vecchi utenti non riescono ancora a vedere i nuovi utenti. (Oppure potresti ricalcolare 10 partite migliori solo per le persone che sono spuntate come prime 10 partite per quella nuova persona, dato che non dovrebbe essere troppo costoso in termini di risorse).

Ogni notte il delta viene fuso nell'indice principale e le partite di tutti vengono ricalcolate.

Il compromesso qui è che le nuove persone potrebbero non apparire immediatamente nei risultati di ricerca.

    
risposta data 23.03.2015 - 09:43
fonte
0

Penso che tu stia cercando bipartito (uomo / donna) completo (tutti gli uomini come tutte le donne e viceversa). Vorrei affrontare il problema da una prospettiva del grafico in cui ogni utente è un nodo e due nodi sono collegati se sono reciprocamente interessati. Quindi è possibile creare una matrice e applicare una sorta di clustering o pattern pattern mining. Se pensi che questo possa aiutare, posso fornire link quando sono a casa (scrivendo dal mio cellulare). Non so se MongoDB possa risolvere questo problema.

    
risposta data 23.03.2015 - 12:15
fonte

Leggi altre domande sui tag