• Aucun résultat trouvé

Théorème de hiérarchie

Dans le document COMPLEXITÉ ALGORITHMIQUE (Page 55-59)

Considérations de base sur le temps

2.1 Temps déterministe

2.1.2 Théorème de hiérarchie

Nous allons maintenant voir l’un des résultats fondateurs de la complexité : le théorème de hiérarchie en temps déterministe. Il s’agit de montrer que l’on peut résoudre strictement plus de problèmes si l’on dispose de plus de temps, ce qui n’est pas très surprenant. Pour formaliser cela, nous devons introduire le concept defonction constructible en temps.

36 Chapitre 2. Considérations de base sur le temps 2-F Définition (fonction constructible en temps)

Une fonctiont:NNestconstructible en tempss’il existe une constanteαet une machine de TuringMqui, sur l’entrée1n(l’entiernen unaire) renvoie1t(n)(l’entiert(n)en unaire) en tempsαt(n).

En quelque sorte, les fonctions constructibles en temps sont des fonctions t :NN

« raisonnables » qui ont de bonnes propriétés. En réalité, la plupart des fonctions que nous utilisons sont constructibles en temps. En voici quelques exemples.

2-G Exemple Les fonctions suivantest:NNsont constructibles en temps : – t(n) =cpour une constantecN;

t(n) =n;

t(n) =2nc pour une constantecN;

– de plus, sit1ett2sont constructibles en temps, alors il en est de même det1+t2 ett1t2: ainsi, tout polynômetN[n]est constructible en temps.

. 2-H Exercice

Montrer que les fonctions ci-dessus sont constructibles en temps.

. 2-I Exercice

Montrer qu’une fonction constructible en temps f(n) telle que f(n) = o(n) est ultimement constante.

Indication : une machine fonctionnant en tempso(n)se comporte de la même façon sur les entrées1net1n+1pournsuffisamment grand.

Le rôle des fonctions constructibles en temps s’illustre par exemple dans le théorème de hiérarchie suivant : une machine disposant de plus de temps peut décider plus de choses.

C’est à nouveau un résultat de Hartmanis et Stearns [HS65] mais sous la forme qui suit il est dû à Hennie et Stearns [HS66] grâce à leur machine universelle avec ralentissement logarithmique vue au théorème1-S.

2-J Théorème (hiérarchie en temps déterministe)

Soit f :NNet g :NNdes fonctions telles que f(n)̸=0(pour tout nN), g est constructible en temps et f logf =o(g). AlorsDTIME(f(n))DTIME(g(n)).

Idée de la démonstration Il s’agit de construire un langageLDTIME(g(n)) tel que L̸∈DTIME(f(n)). Pour cela, nous allons faire en sorte que toute machine fonctionnant

2.1. Temps déterministe 37 en temps f(n) et censée reconnaîtreLse trompe sur au moins une entrée. Dans la lignée des paradoxes logiques célèbres, on utilisera l’auto-référence par une question de la forme « est-ce qu’une machineMsur son propre code rejette en tempsf(n)? », sur laquelle toute machine fonctionnant en tempsf(n)doit se tromper. Modulo quelques détails techniques, le langage L sera l’ensemble des machines M pour lesquelles la réponse à la question précédente est positive.

Pour déciderL, il faudra simuler une machine fonctionnant en temps f(n)par une machine universelle, ce qui lui prendO(f(n)logf(n))étapes (théorème1-S), d’où la condition du théorème.

Démonstration Nous aimerions définir L={〈M〉 | M(〈M〉)rejette en temps f(n)}

Mdésigne une machine de Turing, mais nous ne savons pas décider ce langage en temps g(n)(à cause de la constanteαM dépendant de M dans le théorème1-S). En gardant la même idée, il va falloir être légèrement plus subtil. On va d’abord ajouter un motxquelconque à l’entrée du problème (donc travailler sur l’entrée(〈M〉,x)à la place de〈M〉) pour pouvoir agrandir arbitrairement la taille de l’entrée, puis définir le langage en termes de fonctionnement d’une machine.

SoitV la machine suivante sur l’entrée(〈M〉,x):

– exécuter U(〈M〉,(〈M〉,x))pendant g(n)étapes, où U est la ma-chine universelle du théorème1-Setn=|(〈M〉,x)|

(c’est-à-dire qu’on simuleM(〈M〉,x)tant que la simulation prend moins deg(n)étapes) ;

– siU n’a pas terminé son calcul, alors rejeter ; – sinon, accepter ssiU rejette.

On noteLle langage reconnu parV.

On remarquera queV calcule d’abord g(n)pour savoir quand arrêter l’exécution de U : puisque g est constructible en temps, cela prendO(g(n))étapes. Puis l’exécution deU prend à nouveau g(n)étapes, donc en toutV fonctionne en tempsO(g(n)): ainsi,LDTIME(g(n)).

Montrons maintenant queL̸∈DTIME(f(n)). SoitM un machine fonctionnant en tempsαf(n). AinsiU simuleMen tempsαMαf(n)logf(n)(oùαM est une constante dépendant seulement deM). Pournassez grand, par hypothèse

g(n)αMαf(n)logf(n),

donc pourxassez grand, la simulation deMparUse termine avant g(n)étapes, donc V(〈M〉,x)accepte ssiM(〈M〉,x)rejette. Ainsi,M« se trompe » sur l’entrée(〈M〉,x)et

ne reconnaît donc pasL. ⊓⊔

2-K Remarques

– Nous verrons au théorème6-O une astuce permettant de réduire un peu l’écart

38 Chapitre 2. Considérations de base sur le temps entre les fonctions f et g dans le théorème précédent (c’est-à-dire obtenir mieux que f logf = o(g)). On pourrait également essayer de construire une machine universelle plus efficace que celle du théorème 1-S, mais il s’agit d’une question ouverte comme on l’a vu (remarque1-T).

– Si l’on se restreint aux machines de Turing ayanttoutesexactementk rubans de tra-vail pourk2fixé, alors Fürer [Für82] montre un théorème de hiérarchie optimal, c’est-à-dire sans le facteurlog(f(n)).

Le théorème de hiérarchie est très intuitif puisqu’il nous apprend qu’en disposant de plus de temps de calcul, on peut résoudre plus de problèmes. Cependant, l’hypothèse de constructibilité en temps de la fonctiong est cruciale : en effet, le résultat suivant montre ce que l’on peut faire sans supposerg constructible. Il est dû à Trakhtenbrot [Tra64] en 1964 (rédigé en russe) et a été redécouvert par Borodin [Bor72] en 1972 pour le monde occidental sous le nom de « Gap theorem ».

2-L Théorème (de la lacune)

Il existe une fonction f :NNtelle que f(n)netDTIME(f(n)) =DTIME(2f(n)). Idée de la démonstration L’idée est de définir la fonctionf de sorte qu’aucune machine

de Turing ne s’arrête en un temps compris entre f(n)et2f(n), ce qui implique bien sûr qu’il n’y a aucun langage dansDTIME(2f(n))\DTIME(f(n)).

Démonstration SiMest une machine, on noteΣM son alphabet d’entrée. La propriété suivante sera vérifiée : pour toutn N, aucune machineM telle que |〈M〉| n et

M| n ne s’arrête sur une entrée de taille n en un temps compris entre f(n) et n2f(n).

Posons arbitrairement f(0) =0et définissons f(n)pour unn>0donné. Pour cela on considère la suite(ui)i⩾1définie paru1=netui+1=n2ui+1: ainsi, les intervalles

Maintenant que f est définie, soitLDTIME(2f(n)). Alors une machineMreconnaît Len tempsα2f(n) pour une certaine constanteα. Pourn suffisamment grand, on a|〈M〉|n,M|net α2f(n)n2f(n). Donc, pour|x|suffisamment grand, M(x) ne s’arrête pas en un temps compris entref(|x|)et|x|2f(|x|): puisqu’elle s’arrête en un temps<|x|2f(|x|), on en déduit queM(x)doit s’arrêter en un temps< f(|x|). D’où

LDTIME(f(n)). ⊓⊔

2.1. Temps déterministe 39 . 2-M Exercice

Montrer qu’on peut prendre f strictement croissante dans le théorème ci-dessus.

Indication : modifier la valeur de départ de la suite(ui)dans la démonstration.

2-N Remarque Le nom de ce théorème contre-intuitif vient du « trou » qu’il y a entre f(n)et2f(n), intervalle dans lequel on ne trouve aucun langage. Rappelons que f n’est pas constructible en temps, sinon on contredirait le théorème de hiérarchie.

En réalité, n’importe quelle fonctions:NNconviendrait à la place den7→2n (c’est-à-direDTIME(f(n)) =DTIME(s(f(n)))pour une fonction f construite comme ci-dessus), c’est-à-dire qu’on peut rendre le « trou » aussi grand que l’on veut. Ce théorème est habi-tuellement donné pour une fonctions calculable quelconque (notion que nous n’avons pas définie) ; dans ce cas, f est elle-même calculable.

Dans le document COMPLEXITÉ ALGORITHMIQUE (Page 55-59)