• Aucun résultat trouvé

Théorie de la complexité

2.3 Multiplication complexe et applications

3.1.4 Théorie de la complexité

Dans cette section nous donnons quelques éléments de la théorie de la complexité tirés de [15], dans le but de classer le test de primalité ECPP.

Le but de la théorie de la complexité est de définir des modèles formels des processeurs et des algorithmes que nous utilisons sur nos ordinateurs et de fournir une classification des algorithmes selon le temps de calcul et la quantité (l’espace) de mémoire nécessaires.

Tous les calculs effectués par un ordinateur peuvent être simulés par un automate qui a une très simple structure mathématique : une machine de Turing. Une machine de Turing est définie par un ensemble fini d’états : un état initial, un ensemble fini de symboles et une fonction de transition. Une machine de Turing procède étape par étape en suivant les règles imposées par la fonction de transition et peut écrire des symboles sur une bande mémoire. Il est alors facile de définir le temps de calcul d’un algorithme comme le nombre d’étapes entre le début et la fin du calcul et la quantité de mémoire comme la longueur de la bande mémoire nécessaire. Nous allons utiliser le modèle de calcul appelé Random access machine. Dans ce modèle la détermination du temps de calcul d’un algorithme revient à compter le nombre d’opérations élémentaires en langage machine nécessaires à son exécution.

Par exemple l’ensemble X = {x ∈ N : x est un nombre premier } ⊂ I = N. Par ailleurs une machine de Turing associé au problème de décision "l’entier n ∈ N est-il premier ?" est une "boîte" qui prend en entrées les entiers naturels n et renvoie les réponses "oui" ou "non" adaptées.

La classe de complexité P ("temps polynômial") est la classe des X pour lesquels il existe une machine de Turing qui accepte (si x ∈ X) et rejette (si x /∈ X) correctement tout x en un nombre d’étapes qui est polynômial en la taille des entrées λ(x) (par exemple λ(x) = 1 + blog2xc pour la représentation binaire d’un entier x ∈ N). Une machine associée à la classe P est dite machine de Turing polynômiale. Par exemple le problème "l’entier a ∈ N est-il le produit des entiers b et c" est dans la classe polynômiale P.

La classe de complexité aléatoire BPP ("bounded-error probabilistic polynômial time") est la classe des problèmes de décision X pour lesquelles il existe une machine de Turing polynômiale qui accepte les x ∈ X avec une probabilité au moins égale à 2/3 et rejette les x /∈ X de même avec une probabilité au moins égale à 2/3. Une telle machine est appelée machine de Turing two-side Monte Carlo. On remarquera que X ∈ BPP si et seulement son complémentaire I \ X ∈ BPP.

La classe de complexité RP ("random polynômial time") est la classe des problèmes de décision X pour lesquelles il existe une machine de Turing polynômiale qui accepte les x ∈ X avec une probabilité au moins égale à 1/2 et rejette à chaque fois les x /∈ X. Une telle machine est appelée machine de Turing one-side Monte Carlo. Une utilisation standard consiste à rentrer k-fois la même entrée et à accepter si et seulement si la machine accepte. Par ailleurs, on définit la classe de complexité co-RP comme étant celle des X dont les complémentaires I \X ∈ RP. Par exemple, le test de primalité Miller-Rabin fait du problème "l’entier N est-il premier ?" un problème de la classe co-RP. Donc le problème "l’entier N est-il composé ?" est de la classe de complexité One-side Monte Carlo en utilisant le test de Miller-Rabin.

La classe de complexité ZPP = RP∩ co-RP ("zero-error probabilistic polynomial time") est la classe des problèmes de décision X pour lesquelles il existe une machine de Turing polynômiale probabiliste qui donne toujours la bonne réponse. Une telle machine est appelée machine de Turing de Las Vegas.

L’algorithme ECPP, et surtout sa variante dûe à Huang et Adleman, fait de la preuve de primalité un problème de la classe de complexité Las Vegas. C’est un test de primalité très efficace en pratique, mais son temps de calcul n’est pas rigoureusement établi. On ne dispose que d’une analyse heuristique en eO((log n)5+µ), ou eO((log n)5) asymptotiquement [25]. Si un entier N est donné en entrée, ECPP donne à la sortie l’une de ces trois réponses : "N est premier", "N est composé", "je ne sais pas". Nous rappellons que le test ECPP est envisagé généralement après avoir effectué un test de primalité probabiliste Monte Carlo. On se doute donc que l’entier à tester est premier parce qu’il a passé plusieurs fois le test de Miller-Rabin par exemple. Mais on veut en être sûr, et avoir une preuve. Il est donc question de confirmer qu’un entier probablement premier l’est réellement. Les réponses "N est premier" et "N est composé" renvoyées à la sortie d’une machine de Turing ECPP sont

correctes avec une preuve vérifiable en temps polynômiale. La difficulté consiste à montrer que la troisième éventualité arrive avec une probabilité bornée.

En pratique, les programmes implémentant ECPP ou fastECPP (nous définirons cette variante du test ECPP dans la suite) suivent cette philosophie et donnent toujours des réponses correctes. La réponse "je ne sais pas" est renvoyée à la sortie de l’algorithme lorsque la procédure imposée par l’algorithme ECPP (resp. fastECPP) pour tester un entier N est complexe et nécessite beaucoup trop de temps (en l’occurence le calcul des racines carrées modulo N de discriminants −D tels que N est la norme d’un entier de Q(√−D) ou bien le calcul des polynômes de classes et ou des racines de ces polynômes). Les programmeurs peuvent remédier à ces défauts, puis relancer le test. On n’a pas de rapport sur des nombres entiers probablement premiers ayant indéfiniment résisté au test (fast)ECPP mais on n’a pas non plus, à l’heure où ces notes sont écrites, la preuve qu’il n’en existe pas.

Documents relatifs