Redis
 sql >> Base de données >  >> NoSQL >> Redis

Algorithme de correspondance des utilisateurs

Il serait bon de savoir de quel type de données nous parlons. Combien d'utilisateurs existent ? Combien seront en ligne en moyenne ? Quel est le ratio "d'utilisateurs vus" par rapport à tous les utilisateurs (épars ou dense) ?

Modification de votre algorithme Ne sautez pas le premier mais choisissez un élément aléatoire parmi l'ensemble des utilisateurs en ligne. Cela devrait améliorer l'équilibrage et peut aider à amortir la complexité en fonction du rapport de ces deux ensembles !

Algorithme alternatif (plus structuré ; toujours mauvais dans le pire des cas ; devrait être bon s'il est vu clairsemé )

  • Gardez vu comme un arbre équilibré (insertion O(log n))
  • Gardez en ligne comme un arbre équilibré.
  • Bien qu'il n'y ait pas assez d'utilisateurs sélectionnés :
    • Rechercher le premier écart dans vu (e.g. [0,1,3,7] -> 2; O(log n) selon SO-link)
    • Rechercher le premier utilisateur >=gap-value (O(log n))
    • Si l'utilisateur
    • -> choisir
    • Sinon
    • -> ajouter la valeur d'écart choisie temporairement (pour le moment ; modèle-décision à quelle fréquence mettre à jour en ligne ) à vu OU limiter la recherche d'une manière ou d'une autre à> valeur d'écart choisie (O(log n))

Selon les données, cela devrait très bien fonctionner si les données sont volumineuses et visibles est rare !