• Aucun résultat trouvé

Espace logarithmique

Dans le document COMPLEXITÉ ALGORITHMIQUE (Page 119-123)

Considérations de base sur l’espace

4.1 Espace déterministe

4.1.2 Espace logarithmique

Un peu de recul

Le fait de ne compter que les rubans de travail dans le calcul de la complexité en espace permet d’autoriser en un espace sous-linéaire à lire quand même l’entrée en entier, ce qui est nécessaire pour la plupart des problèmes non triviaux.

Comme nous les avons définies, nos machines de Turing ne peuvent pas « tricher » avec les rubans d’entrée et de sortie car ceux-ci sont respectivement en lecture seule et en écriture seule, ce qui ne leur permet pas vraiment de réaliser des calculs.

Cette remarque nous amène à la définition de la classe très usuelle des langages reconnus en espace logarithmique. Par abus de langage, on noteralogn pour désigner la fonction sur les entiers⌊logn⌋afin de respecter la définition ci-dessus, bien que cela ne change pas grand-chose puisque l’espace est mesuré à une constante près.

4-E Définition (espace logarithmique)

La classeLest l’ensemble des langages reconnus en espace logarithmiqueO(logn), c’est-à-direL=DSPACE(logn).

La restriction sur l’espace semble si forte qu’on peut se demander ce qu’il est possible de calculer en espace logarithmique. Voici quelques exemples.

4-F Exemple Machine qui ajoute 1 à un nombre binaire donné en entrée. Cette machine est en fait un automate fini puisqu’elle n’a pas besoin de ruban de travail : elle ne dispose que de son ruban d’entrée en lecture seule et de son ruban de sortie en écriture seule. Son fonctionnement est le suivant :

– elle se déplace sur la dernière lettre de son ruban d’entrée ;

– de droite à gauche, tant qu’elle lit un1sur son ruban d’entrée, elle écrit0sur son ruban de sortie (la retenue se propage) ;

– dès qu’elle lit0en entrée elle écrit1en sortie (la retenue) et continue son parcours de droite à gauche, en recopiant maintenant chaque symbole sur la sortie (il n’y a plus de retenue) ;

– si elle arrive au début de l’entrée sans avoir vu de0, alors elle ajoute un1en tête (la retenue) sur le ruban de sortie.

Une décrémentation peut bien sûr se faire de manière similaire.

4-G Exemple Machine à un ruban de travail qui renvoie⌊logn⌋en unaire sur l’entrée 1n(nen unaire) :

– un compteur binaire est initialisé à0sur le ruban de travail ;

100 Chapitre 4. Considérations de base sur l’espace – on parcourt l’entrée de gauche à droite tant que le symbole1est lu ;

– le compteur est incrémenté de1à chaque étape à la façon de l’exemple précédent ; – enfin, on parcourt à partir de la deuxième case la valeur finale du compteur en

écrivant un1sur le ruban de sortie à chaque symbole lu.

Puisque la longueur de l’écriture binaire denest1+⌊logn⌋, on obtient bien le résultat voulu. L’espace utilisé sur le ruban de travail ne dépasse jamaislogn.

4-H Exemple Machine à deux rubans de travail qui prend en entrée deux nombres xetyen binaire, et calcule leur sommex+yen binaire. On va effectuer l’algorithme de l’école primaire pour l’addition. Mais puisqu’on ne peut pas écrire sur le ruban d’entrée pour se repérer dans les motsxety, ni les recopier sur un ruban de travail (ce qui dépasserait l’espace logarithmique autorisé), l’idée est de maintenir un compteur binairecsur le premier ruban de travail pour retenir la position en cours de traitement dansx ety.

– Initialiser le compteurcà0et retenir une retenuer égale à0. – Tant quexetyn’ont pas été lus complètement, faire

aller à la fin du motx;

se déplacer à gauche dec cases : pour cela, recopiercsur le second ruban de travail et le décrémenter jusqu’à tomber sur0, en se déplaçant à gauche à chaque décrémentation ;

retenir le chiffre lua;

aller à la fin du moty;

se déplacer à gauche deccases (même méthode) ;

retenir le chiffre lub;

sia+b+r>1alors écrirea+b+r2sur le ruban de sortie, se déplacer à gauche et retenirr=1;

sinon écrirea+b+r sur le ruban de sortie, se déplacer à gauche et retenir r=0,

incrémentercde1comme à l’exemple4-F.

L’espace utilisé sur les rubans de travail n’excède pas deux fois la longueur du compteur et est donc logarithmique.

On le voit, l’astuce pour utiliser seulement un espace logarithmique consiste souvent à utiliser des compteurs en binaire pour se repérer sur les rubans. En réalité, en espace logarithmique on peut calculer beaucoup de fonctions de bases (addition, multiplication, etc.), peut-être plus qu’on pourrait le croire a priori.

4.1. Espace déterministe 101 . 4-I Exercice

Décrire le principe d’une machine de Turing fonctionnant en espace logarithmique qui calcule le produit de deux nombres binairesxetydonnés en entrée.

4.1.3 Composition

Puisque le ruban de sortie n’est pas compté dans l’espace, une fonction g : Σ Σ calculable en espacesg(n)peut renvoyer un résultat de taille|g(x)|très supérieure àsg(|x|). Néanmoins, lors de la composition f g de deux fonctions f et g, il n’est pas nécessaire de calculer intégralement sur un ruban la valeurg(x)renvoyée parg. En la calculant « à la volée » comme le montre la proposition suivante, on peut en effet économiser de l’espace par rapport à l’algorithme naïf consistant à calculer g(x)avant d’exécuter f sur l’entrée g(x), ce qui prendrait un espaceO(sg(|x|) +|g(x)|+sf(|g(x)|)).

4-J Proposition

Si f,g : Σ Σ sont deux fonctions calculables en espace sf(n) logn et sg(n) respectivement, alors leur composition f g, x 7→ f(g(x)), est calculable en espace O(sg(|x|) +sf(|g(x)|)).

Idée de la démonstration Pour calculer f(g(x)), il s’agit simplement d’exécuter la ma-chine pourf et, dès qu’elle souhaite lire une nouvelle case de son entrée, de recalculer g(x)à la volée (grâce à la machine pour g) sans stocker le résultat.

Démonstration Remarquons tout d’abord qu’en espacesg(|x|) +log|g(x)|, sur l’entrée (i,x)on peut calculer le i-ème symbole de g(x). Voici comment procéder, où Mg désigne la machine calculantg en espacesg(n).

– SimulerMg(x)sans écrire sur le ruban de sortie, mais en mettant à jour sur un ruban de travail auxiliaire la position de la case la plus à gauche du ruban de sortie dans laquelle un symbole non vide est inscrit. Cela se fait en incrémentant un compteur dès que la tête dépasse la précédente position sur la gauche. L’espace utilisé estsg(|x|)pour la machineMg elle-même, etO(log|g(x)|)pour maintenir le compteur. Nous connaissons donc maintenant le numéro de la case du premier symbole deg(x)sur le ruban de sortie.

– Simuler une nouvelle foisMg(x)sans écrire sur le ruban de sortie, mais en mettant à jour sur un ruban de travail auxiliaire la position de la tête sur le ruban de sortie.

– Dès que la tête passe par la i-ème case à partir de la position la plus à gauche (c’est-à-dire dès qu’on passe par la case correspondant aui-ème symbole deg(x)), mettre à jour le nouveau symbole inscrit.

À la fin du calcul, nous avons bien le dernier symbole écrit sur la case correspondant aui-ème symbole deg(x). SiMg akg rubans de travail alors la machine que l’on vient

102 Chapitre 4. Considérations de base sur l’espace de décrire en akg+2.

Voici maintenant comment calculer f(g(x))en espaceO(sg(|x|) +sf(|g(x)|)), oùMf désigne la machine calculantf en espacesf(n). Sikf désigne le nombre de rubans de travail deMf, alors le nombre de rubans de travail de la machine suivante estkf+kg+2. Le ruban de sortie correspond à celui deMf.

i1;

tant queMf n’atteint pas un état terminalfaire

calculer lei-ème symbole de g(x), notéa,

simuler une étape de calcul de Mf en remplaçant le résultat de la lecture du ruban d’entrée par le symbolea,

si la tête du ruban d’entrée deMf se déplace vers la gauche, alorsii−1; si elle se déplace vers la droite, alorsii+1. Puisquesf(n)logn, que le calcul def sur l’entrée g(x)utilise un espacesf(|g(x)|), et qu’on réutilise à chaque fois l’espace pris par le calcul des symboles deg(x), l’espace

total estO(sg(|x|) +sf(|g(x)|)). ⊓⊔

4.1.4 Théorème de hiérarchie

Comme pour la complexité en temps, un théorème de hiérarchie dû à Stearns, Hartmanis et Lewis [SHL65] montre que disposer de plus d’espace permet de décider strictement plus de langages. Pour l’énoncer, nous avons besoin de la notion de fonction constructible en espace.

4-K Définition

Une fonctions:NNestconstructible en espaces’il existe une constanteαet une machine de TuringMqui, sur l’entrée1n(l’entiernen unaire) renvoie1s(n)(l’entiers(n)en unaire) en utilisant un espaceαs(n).

Là encore, les fonctions usuelles de complexité sont constructibles en espace, par exemple : – s(n) =⌊logn⌋comme on l’a vu à l’exemple4-G;

s(n) =n;

– sis(n)ets(n)sont constructibles en espace, alors il en est de même de leur produit et de leur somme : ainsi, tous les⌊logn⌋k et tous les polynômes sont constructibles en espace ;

s(n) =2nest constructible en espace.

Dans le document COMPLEXITÉ ALGORITHMIQUE (Page 119-123)