Redis
 sql >> Database >  >> NoSQL >> Redis

Algoritmo di corrispondenza utente

Sarebbe bene sapere di che tipo di dati stiamo parlando. Quanti utenti esistono? Quanti saranno in media online? Com'è il rapporto tra "utenti visti" rispetto a tutti gli utenti (sparsi e densi)?

Modifica del tuo algoritmo Non visualizzare il primo, ma scegli un elemento casuale dall'insieme degli utenti online. Ciò dovrebbe migliorare il bilanciamento e può aiutare con la complessità ammortizzata a seconda del rapporto tra questi due insiemi!

Algoritmo alternativo (più strutturato; nel peggiore dei casi ancora negativo; dovrebbe essere buono se visto) )

  • Mantieni visto come albero bilanciato (inserimento O(log n))
  • Mantieni online come un albero equilibrato.
  • Anche se non sono stati scelti abbastanza utenti:
    • Cerca il primo spazio vuoto in visto (es. [0,1,3,7] -> 2; O(log n) secondo SO-link)
    • Cerca il primo utente>=gap-value (O(log n))
    • Se l'utente
    • -> scegli
    • Altro
    • -> aggiungi il valore del gap scelto temporaneamente (per questo momento; modello-decisione con quale frequenza aggiornare online ) a visto OPPURE limitare la ricerca in qualche modo a> valore-gap-scelto (O(log n))

A seconda dei dati, questo dovrebbe funzionare molto bene se i dati sono enormi e visti è scarso!