2 points par GN⁺ 2024-05-17 | 1 commentaires | Partager sur WhatsApp

Développement d’un nouvel algorithme de comptage efficace

Introduction

  • Imaginez que vous effectuez un suivi d’animaux sauvages dans une forêt primaire.
  • Vous prenez des photos d’animaux avec un appareil photo numérique et souhaitez connaître le nombre d’animaux distincts.
  • Les méthodes existantes exigent de mémoriser et de comparer tous les animaux, ce qui est inefficace.

Situation du problème

  • Sur de très grandes plateformes comme Facebook, il est difficile de compter le nombre d’utilisateurs uniques qui se connectent chaque jour.
  • Récemment, des informaticiens ont proposé une nouvelle méthode pour estimer le nombre d’éléments distincts dans de longues listes.
  • Cet algorithme n’a besoin de mémoriser qu’un petit nombre d’éléments.

Algorithme CVM

  • L’algorithme CVM constitue une étape importante pour résoudre le problème des éléments uniques, étudié depuis plus de 40 ans.
  • Cet algorithme permet d’estimer efficacement le nombre d’éléments distincts dans un flux de données.
  • « Le nouvel algorithme est étonnamment simple et facile à implémenter » — Andrew McGregor

Exemple : le livre audio de Hamlet

  • Hamlet contient 30 557 mots. Pour savoir combien d’entre eux sont uniques, il faudrait normalement mémoriser tous les mots.
  • L’algorithme CVM utilise la randomisation pour réduire l’usage mémoire.

Fonctionnement de l’algorithme CVM

  • Premier tour : enregistrer 100 mots, puis supprimer les mots en double à l’aide d’un lancer de pièce.
  • Deuxième tour : pour conserver les mots en double, il faut réussir deux lancers de pièce.
  • Troisième tour : il faut réussir trois lancers de pièce.
  • Le processus est répété jusqu’au k-ième tour afin d’estimer le nombre de mots uniques.

Vérification de la précision

  • La précision varie en fonction de la taille de la mémoire.
  • Le nombre de mots uniques dans Hamlet est de 3 967 ; avec une mémoire de 100 éléments, l’estimation moyenne est de 3 955, et avec une mémoire de 1 000 éléments, l’estimation moyenne est de 3 964.

Conclusion

  • « Même pour des problèmes fondamentaux et bien étudiés, il existe des solutions simples mais contre-intuitives » — William Kuszmaul

L’avis de GN⁺

  • Utile dans les situations de data streaming : l’algorithme CVM peut estimer efficacement les éléments distincts dans de grands flux de données, ce qui le rend utile pour l’analyse en temps réel.
  • Efficacité mémoire : il permet de minimiser l’utilisation de la mémoire tout en conservant une grande précision, ce qui est particulièrement avantageux dans les environnements à mémoire contrainte.
  • Importance de la randomisation : le fait de pouvoir résoudre simplement un problème complexe grâce à la randomisation laisse entrevoir un fort potentiel d’application dans d’autres domaines.
  • Points à considérer pour l’adoption : lors de l’intégration de cet algorithme, il faut tenir compte de l’équilibre entre taille mémoire et précision. Si la mémoire est insuffisante, la précision peut diminuer.
  • Technologies associées : il vaut la peine de le comparer à d’autres algorithmes d’estimation des éléments distincts, comme HyperLogLog. Il est important de comprendre les avantages et les limites de chaque algorithme afin de choisir la meilleure solution selon le contexte.

1 commentaires

 
GN⁺ 2024-05-17
Avis Hacker News

Résumé des commentaires de Hacker News

  • Algorithme similaire à HyperLogLog
    Un algorithme similaire à HyperLogLog est expliqué simplement en utilisant les séries de lancers de pièce. Il fonctionne de manière particulièrement efficace sur des données en streaming et utilise peu de mémoire.

  • Signalement d’une erreur dans l’explication de l’algorithme
    Un commentaire souligne que l’explication de l’algorithme est erronée et propose la méthode correcte à l’aide d’un exemple de code. La méthode consistant à stocker d’abord les mots puis à les supprimer produit des résultats plus précis.

  • Recommandation de l’article scientifique
    Il est mentionné que l’article scientifique est aussi facile à lire que le billet de blog, tout en fournissant davantage d’informations. Il décrit un algorithme simple pour estimer la cardinalité d’un ensemble dans des données en streaming.

  • Exemple d’implémentation en Python
    Un exemple d’implémentation Python d’un algorithme de streaming est fourni. Ce code simple permet de comprendre l’algorithme et de l’expérimenter.

  • Utile pour le refactoring système
    Quelqu’un indique être en train de refactoriser un système qui compte les visites en les insérant dans une table, et considère cette approche comme une alternative intéressante à HyperLogLog.

  • Méthode économe en mémoire
    Il est mentionné que des informaticiens ont inventé une méthode économe en mémoire pour estimer la taille de sous-ensembles.

  • Discussion sur la borne de Chernoff
    Une discussion porte sur une variante de la borne de Chernoff utilisée dans l’article scientifique. Il est indiqué qu’on ne sait pas avec certitude si cette variante compromet la validité de la démonstration.

  • Différence entre estimation et comptage des éléments uniques
    Il est souligné qu’estimer le nombre d’éléments uniques et les compter réellement sont deux choses très différentes, et que le titre est donc inapproprié.

  • Présentation d’un algorithme de flux efficace
    Un algorithme efficace et facile à implémenter pour trouver les k éléments les plus fréquents dans un flux est présenté. L’article de Karp, Shenker & Papadimitriou est recommandé.

  • Importance de la pensée créative
    Un commentaire dit apprécier cet exemple de « penser en dehors du cadre » et insiste sur l’importance de trouver les bonnes questions pour résoudre un problème. Il exprime l’espoir que l’on puisse intérioriser et appliquer ce type de pensée créative à travers divers exemples.