Aller au contenu

« Algorithme de Flajolet et Martin » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
Cynddl (discuter | contributions)
Créé en traduisant la page « Flajolet–Martin algorithm »
(Aucune différence)

Version du 5 février 2016 à 00:36

L'algorithme de Flajolet–Martin est un algorithme permettant d'approximer le nombre d'éléments distincts dans un flot, en une seule passe et avec une complexité logarithmique en mémoire, proportionnelle au nombre maximum d'élements distincts. Cet algorithme a été inventé en 1984 par Philippe Flajolet and G. Nigel Martin[1], puis amélioré par Marianne Durand et Philippe Flajolet.[2][3]

En 2010,[4] Daniel M. Kane, Jelani Nelson et David P. Woodruff ont proposé un algorithme avec une complexité spatiale presque optimale et un coût de modification en O(1).

L'algorithme

L'algorithme nécessite une fonction de hashage , associant à une entrée  un entier dans , dont les images sont uniformément réparties. L'ensemble des entiers de 0 à correspond en fait à l'ensemble des chaînes binaires de longueur .


Étant donné un entier positif , on note  le -ème bit dans la représentation binaire de , de sorte que:

On définit ensuite un fonction  qui associe à y la position du bit de poids faible dans sa représentation binaire :

avec . Par exemple, car le bit de poids faible est 1, alors que  avec le bit de poids faible en troisième position. Étant donné que les images de la fonction de hashage sont uniformément réparties, la probabilité d'observer une valeur terminant par  (un suivi de  zéros) est  et correspond à obtenir  piles suivi d'un face en lancant une pièce de monnaie équilibrée.

L'algorithme de Flajolet–Martin estime la cardinalité d'un multiensemble  de la manière suivante :

  1. Initialiser un vecteur BITMAP contenant  zéros.
  2. Pour chaque élement  dans , effectuer :
    1. index = .
    2. .
  3. On note  le plus petit indice  tel que .
  4. La cardinalité de  est approchée par  avec .

Avec  le nombre d'éléments distincts de , alors  est accédé environ  fois, accédé  fois, etc.. Ainsi, si  vaut certainement 0, de même que si  vaut certainement 1. Si  alors  vaut soit 1 soit 0.

Les calculs pour obtenir le facteur de correction  sont détaillés dans l'article de Flajolet et Martin.

Voir aussi

Références

  1. Philippe Flajolet et G. Nigel Martin, « Probabilistic counting algorithms for data base applications », Journal of Computer and System Sciences, vol. 31, no 2,‎ , p. 182–209 (DOI 10.1016/0022-0000(85)90041-8, lire en ligne)
  2. (en) Marianne Durand et Philippe Flajolet, Algorithms - ESA 2003, vol. 2832, coll. « Lecture Notes in Computer Science », , 605 p. (ISBN 978-3-540-20064-2, DOI 10.1007/978-3-540-39658-1_55), « Loglog Counting of Large Cardinalities »
  3. Philippe Flajolet, Éric Fusy, Olivier Gandouet et Frédéric Meunier, « Hyperloglog: The analysis of a near-optimal cardinality estimation algorithm », Discrete Mathematics and Theoretical Computer Science,‎ , p. 127–146 (lire en ligne)
  4. (en) D. M. Kane, J. Nelson et D. P. Woodruff, Proceedings of the twenty-ninth ACM SIGMOD-SIGACT-SIGART symposium on Principles of database systems of data - PODS '10, (ISBN 978-1-4503-0033-9, DOI 10.1145/1807085.1807094), « An optimal algorithm for the distinct elements problem », p. 41

Liens externes