D'après le théorème de la hiérarchie spatiale, on sait que si est constructible dans l'espace, alors DSPACE ( ) n'est pas égal à DSPACE ( .
Ici, par DSPACE ( je veux dire la classe de tous les problèmes qui peuvent être résolus dans l'espace par une machine de Turing avec un alphabet fixe. Cela permet de considérer le théorème de la hiérarchie spatiale avec une telle précision.
L'argument standard donne une constante multiplicative : nous avons besoin de l'espace pour construire un calcul d'une machine de Turing par une machine universelle. Nous avons également besoin de pour résoudre un problème d'arrêt.
Question: Is DSPACE ( ) égal à DSPACE ( )?
cc.complexity-theory
complexity-classes
Alexey Milovanov
la source
la source
Réponses:
On peut prouver que DSPACE( f( 32n ) ) ≠ DSPACE( f( n ) ) siF croît au moins linéairement en utilisant une variante simple de l'argument de remplissage standard. Pour une langueL , soitL′= { x 0| x | / 2∣ x ∈ L } .
Prétendre.L ∈ DSPACE ( f( n ) ) si et seulement si L′∈ DSPACE ( f( 23n ) ) siF( n ) ≥ 32n .
(Ma première réponse avait plusieurs déclarations incorrectes, merci à Emil d'avoir repéré cela.)
Je vais d'abord montrer comment utiliser la revendication pour prouver la hiérarchie. PuisqueF croît au moins linéairement, nous avons DSPACE ( 2 f( n ) ) ⊂ DSPACE ( f( 2 n ) ) . Prendre une langue L ∈ DSPACE ( f(2n))∖ DSPACE(f(n)) . En utilisant la revendication,L′∈ DSPACE(f(43n))= DSPACE(f(n)) , où la dernière égalité est par hypothèse indirecte. Mais alorsL∈ DSPACE(f(32n))= DSPACE(f(n)) , où la dernière égalité est à nouveau par l'hypothèse indirecte, donnant une contradiction.
Preuve de la réclamation. SiL′∈ DSPACE (f(23n)) , puis pour prouverL∈ DSPACE(f(n)) , il suffit d'écrire|x|/2 0 à la fin de l'entréex et simuler la machine qui a acceptéL′ . Puisquef(n)≥32n , cela n'augmentera pas l'espace que nous utilisons. (En fait, savoir combien de 0 à écrire n'est pas clair du tout sif est petit et nous ne pouvons pas augmenter la taille de l'alphabet - à la place, nous pouvons utiliser une autre bande et écrire sur tout ce qui viendrait après la fin dex .)
L'autre direction est aussi simple que cela en remplaçant les 0 par des *, si nous sommes autorisés à écrire des *. (Voir les problèmes avec cela dans mon commentaire à la question.) Si nous ne sommes pas autorisés à écrire des étoiles, nous modifions légèrement la définition deL′ comme L′={x10|x|/2∣x∈L} . Maintenant, au lieu d'écrire des étoiles, nous gardons l'entrée d'origine x10|x|/2 et travailler avec ça. Mais chaque fois que nous atteignons un 1, nous allons à droite jusqu'à ce que nous touchions un autre 1 pour vérifier s'il s'agissait du 1 de fin de mot ou non. Si nous avons trouvé un autre 1, nous revenons simplement à notre 1. Si ce n'est pas le cas, nous revenons toujours en arrière, mais nous saurons qu'il doit être traité comme une étoile - si nous écrivions dessus, alors nous écrivons également un 10 après pour avoir un nouveau marqueur de fin de mot courant. (En fait, il y a aussi un petit hic dans cette partie si f est petit - comment pouvons-nous vérifier si l'entrée est de la forme x10|x|/2 ? Sans détruire l'entrée, je ne peux résoudre ce problème qu'en utilisant plusieurs têtes pour les petits f .)
la source