De grands écarts entre la RAM et la complexité de la machine Turing

9

Si nous considérons uniquement les problèmes dans P, y a-t-il de grands écarts entre l'algorithme de RAM de mots connu le plus rapide et l'algorithme de machine de Turing le plus rapide connu pour des problèmes particuliers? Je suis particulièrement intéressé s'il existe de grandes lacunes pour les problèmes naturels d'intérêt général.

Lembik
la source
6
une machine RAM peut être simulée par une machine Turing avec une surcharge de en runtime. Il n'y aura donc pas de très grandes lacunes. O(nlogn)
Shaull
@Shaull Existe-t-il un écart de cette taille pour tout problème naturel / populaire?
Lembik
3
Palindrome prend du temps sur une TM à bande unique (et est O ( n ) dans la RAM). eecs.yorku.ca/course_archive/2008-09/W/6115/palindrome.pdfΩ(n2)O(n)
SamM
6
Le commentaire de Shaull n'est vrai que pour les machines non déterministes et dans le cadre de deux bandes TM, pour autant que je sache. Citation, Shaull?
Ryan Williams
1
@ qbt937 - Wow, quelle explosion du passé :) Je crois que je n'ai pas fourni de citation parce que je n'en avais pas (et je n'en ai pas maintenant), et il se pourrait bien que Ryan Williams ait raison.
Shaull

Réponses:

6

Il est connu que tout problème que vous pouvez calculer sur une machine RAM au temps , vous pouvez le faire dans une machine de Turing à temps au plus T ( n ) 2 . Vous devez noter que la taille totale de la mémoire utilisée ne peut pas être supérieure à T ( n ) , car cela signifierait que vous avez effectué plus d'opérations d'écriture que T ( n ) , donc chaque fois que vous récupérez quelque chose dans la mémoire RAM, le Turing la machine prendrait dans le pire des cas T ( n )T(n)T(n)2T(n)T(n)T(n)le temps de trouver séquentiellement l'élément souhaité dans la bande. Outre l'accès à la mémoire, le reste des opérations devrait prendre environ le même temps. Et ainsi vous obtenez la limite.

Javier Cano
la source
2
Les RAM peuvent calculer la longueur de l'entrée (et donc aussi la partie de cette longueur) en temps logarithmique, mais les machines de Turing de base ont besoin d'un temps linéaire pour calculer cette parité.
1

AO(nlog(n))O(n2log(n)3)A

O(T(n)2)O(T(n))AAO(nlog(n))AO(T(n)2)O(T(n)nlog(n))

tabn=2klog(n)dlog(n)log(n)t[0..log(n)1]Xt=1tab[i]d[t]=tab[n/2+i]d[t] i[0..n/21]Xt=0t=0log(n)1Xtnlog(n)+log(n)log(n)

Aw=log(n)O(nlog(n)+log(n)2)O(nlog(n))log(n)AXtO(n)i[0..n/21]At=0,1,2,log(n)1XtO(nlog(n))O(nlog(n))AO(nlog(n))

AO(n2log(n)2)tAtO(nlog(n))tab[i]d[t]0tab[i]Atn(log(n)1)/2mO(m2)AO((nlogn)2)t=0,1,2,log(n)1O(n2log(n)3)


mmO(m2)x<0xO(m2)O(m2)

En outre, il existe des algorithmes TM de test d'égalité et tous nécessitent un temps quadratique car ils ont besoin d'un zigzag, voir par exemple l'exemple 2 de la machine de Turing à courses.cs.washington.edu/courses/cse431/14sp/scribes/ lec3.pdf

Daniel Porumbel
la source
La limite inférieure pour les palindromes ne s'applique qu'au modèle à bande unique non naturel. Il est simple de tester l'égalité de deux chaînes sur une MT en temps linéaire. Il en va de même pour l'égalité de deux séquences d'entrées plus longues. De plus, pour que la question ait un sens, les entrées des deux modèles de machine doivent être identiques, c'est-à-dire écrites sous forme de chaînes sur un alphabet fini. Ainsi, votre RAM aurait besoin de temps O (log n) pour lire chaque entrée et la convertir en un mot, rendant cette opération inutile.
Emil Jeřábek
@Emil Jeřábek, je vais modifier ma réponse pour indiquer que je ne pense qu'à la 1-tape TM. Lorsque vous dites qu'une MT peut tester l'égalité en temps linéaire, je suppose que vous pensez à une MT à 2 bandes. Cependant, j'ai compris que toute la question concernait les MT à 1 bande. En ce qui concerne le formulaire de saisie, je dois avouer que vous avez peut-être raison, au moins pour certains mots-RAM. Mais pour autant que je sache, un tableau int C ++ stocke les entiers les uns après les autres sans séparateur, comme s'ils stockaient ensemble une séquence de bits. 10 pouces sur 16 bits occupent exactement 160 bits, non? Même si ce n'est pas le cas, on pourrait construire une machine fonctionnant ainsi.
Daniel Porumbel
3
Le modèle de machine de Turing standard dans la théorie de la complexité est multi-bandes. Je ne vois pas en quoi le C ++ est pertinent, nous ne discutons pas du C ++, mais du modèle RAM. Dans ce modèle, les emplacements de mémoire individuels peuvent contenir des nombres de longueur , mais nous ne pouvons toujours opérer que sur un (ouO(logn)O(1)logn
Il existe deux possibilités: (1) L'emplacement d'entrée [0] contient le premier bit du premier nombre, l'emplacement [1] contient le deuxième bit du premier nombre, etc. Ensuite, il fautO(nlogn)
@Emil Jeřábek, Suite à vos remarques, j'ai édité la question pour proposer un problème et un algorithme RAM qui prend explicitement O(nlog(n))