Ouvrir le menu principal
Page d'aide sur l'homonymie Cet article concerne complexité de Kolmogorov. Pour une autre mesure de complexité, voir complexité de Lempel-Ziv.

En informatique théorique et en mathématiques, plus précisément en théorie de l'information, la complexité de Kolmogorov, ou complexité aléatoire, ou complexité algorithmique d'un objet — nombre, image numérique, chaîne de caractères — est la taille du plus petit algorithme (dans un certain langage de programmation fixé) qui engendre cet objet. Elle est nommée d'après le mathématicien Andreï Kolmogorov, qui publia sur le sujet dès 1963[1],[2]. Elle est aussi parfois nommée complexité de Kolmogorov-Solomonoff[réf. nécessaire][Par qui ?]. Cette quantité peut être vue comme une évaluation d'une forme de complexité de l'objet.

Sommaire

ExemplesModifier

Considérons les deux chaînes de 32 caractères suivantes :

Exemple 1: abababababababababababababababab
Exemple 2: 4c1j5b2p0cv4w1x8rx2y39umgw5q85s7

La première chaîne de caractères est engendrée par l'algorithme "ab 16 fois", autrement dit par un algorithme de 10 caractères. Le second exemple ne semble pas avoir de petit algorithme qui l'engendre mise à part l'algorithme qui consiste à écrire cette chaîne de caractères, i.e. un algorithme de 32 caractères. Ainsi, le premier exemple semble avoir une complexité de Kolmogorov plus petite que le deuxième.

 
L'ensemble de Mandelbrot.

La figure de droite montre une image bitmap qui présente l'ensemble de Mandelbrot. Cette image de 24 bits pèse 1.26 mega octets. Par contre, un petit algorithme peut reproduire cette image à partir de la définition mathématique de l'ensemble de Mandelbrot et des coordonnées des coins de l'image. Ainsi, la complexité de Kolmogorov de l'image bitmap (non compressée) est moins que 1.26 mega octets dans un modèle de calcul raisonnable.

DéfinitionModifier

Considérons une machine informatique M pouvant exécuter des programmes. On dit que cette machine est universelle lorsqu’elle peut émuler n'importe quelle autre machine informatique. La machine de Turing universelle en est un exemple.

On note PM l'ensemble des programmes écrits pour la machine M. Pour un programme pPM, on note l(p) sa longueur en nombre d’instructions pour la machine M et s(p) sa sortie. La complexité de Kolmogorov KM(x), ou complexité algorithmique, d’une suite x finie de caractères pour une machine M est définie par :

 .

C’est donc la longueur du plus petit programme écrit pour la machine M qui génère la suite x. Une suite constante a une complexité faible car les programmes qui la génèrent peuvent être très courts.

Reste à savoir dans quelle mesure la fonction KM(x) dépend de la machine M, car on peut tout à fait imaginer une machine possédant des instructions simples pour générer certaines suites complexes. La réponse est la suivante : il existe une machine universelle U (souvent qualifiée d'additivement optimale) telle que pour toute machine M il existe une constante cM vérifiant pour toute suite x l'inégalité :

 

Intuitivement, cM est la longueur d'un interpréteur (ou d'un émulateur), écrit pour la machine U, du langage utilisé par la machine M. On parle alors d’universalité de la complexité de Kolmogorov, en ce sens qu'elle ne dépend pas, à une constante additive près, de la machine considérée.

Une suite peut alors être considérée comme d’autant plus « aléatoire » que sa complexité est grande par rapport à sa taille. De ce point de vue, les décimales des nombres π, e ou 2 ne sont pas vraiment aléatoires puisqu'il existe des algorithmes très simples pour les calculer.

Une difficulté supplémentaire réside dans le fait que la complexité de Kolmogorov n'est pas décidable : on peut donner un algorithme produisant l'objet voulu, ce qui prouve que la complexité de cet objet est au plus la taille de cet algorithme. Mais on ne peut pas écrire de programme qui donne la complexité de Kolmogorov de tout objet que l'on voudrait lui donner en entrée.

La notion, manipulée avec précaution, se révèle néanmoins à l'origine de nombreux résultats théoriques.

Par exemple, on appelle nombre incompressible au sens de Kolmogorov un réel dont le développement p-adique (binaire pour plus de commodité) est comparable à la taille de l'algorithme qui permet de le calculer. En ce sens, tous les rationnels et certains irrationnels sont compressibles, en particulier les nombres transcendants comme π, e ou 0,12345678910111213… dont le développement binaire est infini mais la suite des décimales parfaitement calculable. En revanche, le nombre dit Ω de Chaitin ne l'est pas : ce nombre mesure la probabilité qu'une machine, alimentée par un programme composé de bits aléatoires, s'arrête. La topologie des nombres incompressibles est intéressante : on conçoit intuitivement que cet ensemble est dense dans R, mais il est impossible d'exhiber de façon algorithmique un réel incompressible, puisque cela reviendrait à en donner une méthode de calcul efficace. De plus, on peut démontrer que tous les nombres incompressibles sont normaux, la suite de leurs décimales doit être aléatoire au sens fort.

PropriétésModifier

La complexité de Kolmogorov n'est pas calculable. En d'autre termes il n'existe pas de programme informatique qui prenne en entrée s et renvoie K(s). Pour le prouver, raisonnons par l'absurde et supposons qu'une telle fonction Kolmo existe. On note k la taille de cette fonction (i.e. le nombre de caractères de son code source). On pourrait alors écrire l'algorithme suivant :

  n := 1
  Tant que Kolmo(n) < k + 100 faire:
    n := n + 1
  Fin du Tant que
  écrire n

Ainsi cet algorithme écrit le plus petit nombre à avoir une complexité de Kolmogorov supérieure à k+100 (ce nombre existe nécessairement car il n'y a qu'un nombre fini de programmes de taille plus petite que k+100 et il y a une infinité de nombres entiers naturels).

Mais l'algorithme ci-dessus s'écrit justement avec moins de k+100 caractères : il est donc de complexité inférieure à k+100, or il écrit justement un nombre de complexité supérieure à k+100, ce qui est absurde (on peut rapprocher cette remarque de l'argument utilisé pour le paradoxe de Berry).

Donc il n'existe pas de fonction qui calcule la complexité de Kolmogorov.

Variantes avec ressources bornéesModifier

La définition de la complexité de Kolmogorov est défini en fonction du plus petit programme qui produit x. Mais ce programme pourrait consommer d'importantes ressources. C'est pourquoi il est important de prendre en compte les ressources utilisées par le programme[3]. Soit U une machine universelle. Voici une version bornée par le temps t :

 

On notera que la complexité temporelle est définie en fonction de la sortie x et non pas de la taille du programme p. Sipser, en 1983[4], a proposé une mesure de la taille du plus petit programme qui permet de distinguer une chaîne de caractère x. Buhrman, Fortnow et Laplante en 2002 en donnèrent une version non déterministe, en prenant une machine universelle non-déterministe[5]. On trouve d'autres définitions chez Levin[réf. nécessaire], et chez Allender[6] où la définition de la complexité est la somme de la complexité de Kolmogorov et la contribution de la complexité temporelle.

Lien avec la théorie de la complexité algorithmiqueModifier

Des liens entre complexité de Kolmogorov et complexité algorithmique ont établi en utilisant l'ensemble suivant comme oracle :

R = ensemble des chaînes de caractères x dont la complexité de Kolmogorov est au moins |x|/2

En 2002, Allender, Buhrman, Koucky, van Melkebeek et Ronnerbuger[7] ont démontré que PSPACE est inclus dans PR et que EXPTIME est inclus dans NPR. En 2004, Allender, Buhrman, Koucky démontre[8], en utilisant les même techniques dans [7], que NEXPTIME est inclus dans NPR.

Notes et référencesModifier

Une partie de cet article (ou d'une version antérieure) est adaptée de « Petit manuel à l’usage des agrégatifs préparant l’oral de modélisation stochastique », écrit par Djèlil Chafaï et publié sous GFDL.

NotesModifier

RéférencesModifier

  1. Andrey Kolmogorov, « On Tables of Random Numbers », Sankhyā Ser. A., vol. 25,‎ , p. 369–375 (Math Reviews 178484)
  2. Andrey Kolmogorov, « On Tables of Random Numbers », Theoretical Computer Science, vol. 207, no 2,‎ , p. 387–395 (DOI 10.1016/S0304-3975(98)00075-9, Math Reviews 1643414)
  3. (en-GB) « Kolmogorov Complexity and Computational Complexity », {{Article}} : paramètre « périodique » manquant,‎ (DOI 10.1007/978-3-642-77735-6, lire en ligne, consulté le 14 juillet 2019)
  4. Michael Sipser, « A Complexity Theoretic Approach to Randomness », Proceedings of the Fifteenth Annual ACM Symposium on Theory of Computing, ACM, série STOC '83,‎ , p. 330–335 (ISBN 9780897910996, DOI 10.1145/800061.808762, lire en ligne, consulté le 14 juillet 2019)
  5. H. Buhrman, L. Fortnow et S. Laplante, « Resource-Bounded Kolmogorov Complexity Revisited », SIAM Journal on Computing, vol. 31, no 3,‎ , p. 887–905 (ISSN 0097-5397, DOI 10.1137/S009753979834388X, lire en ligne, consulté le 14 juillet 2019)
  6. Eric Allender, « When Worlds Collide: Derandomization, Lower Bounds, and Kolmogorov Complexity », Of Reductions,in“proc.29thacm Symposium on Theory of Computing,‎ , p. 730–738 (lire en ligne, consulté le 14 juillet 2019)
  7. a et b E. Allender, H. Buhrman, M. Koucky et D. van Melkebeek, « Power from random strings », The 43rd Annual IEEE Symposium on Foundations of Computer Science, 2002. Proceedings.,‎ , p. 669–678 (DOI 10.1109/SFCS.2002.1181992, lire en ligne, consulté le 14 juillet 2019)
  8. (en) Eric Allender, Harry Buhrman et Michal Koucký, « What Can be Efficiently Reduced to the K-Random Strings? », STACS 2004, Springer Berlin Heidelberg, série Lecture Notes in Computer Science,‎ , p. 584–595 (ISBN 9783540247494, DOI 10.1007/978-3-540-24749-4_51, lire en ligne, consulté le 14 juillet 2019)

AnnexesModifier

BibliographieModifier

  • (fr) Gregory Chaitin Hasard et complexité en mathématiques, la quête de Ω, Flammarion, janvier 2007 (ISBN 2082105687).
  • Ming Li and Paul Vitanyi. An Introduction to Kolmogorov Complexity and Its Applications. Springer Verlag 2008 (ISBN 978-0-387-49820-1)

Articles connexesModifier