Pour chaque fonction calculable

19

Pour chaque fonction calculable existe-t-il un problème qui peut être résolu au mieux en temps ou existe-t-il une fonction calculable telle que chaque problème qui peut être résolu dans peut également résolu en temps ?Θ ( f ( n ) ) f O ( f ( n ) ) o ( f ( n ) )FΘ(F(n))FO(F(n))o(F(n))

Cette question m'est venue à l'esprit hier. J'y pense depuis un petit moment maintenant, mais je ne peux pas le comprendre. Je ne sais pas vraiment comment je ferais pour google, alors je demande ici. Voici ce que j'ai trouvé:

Ma première pensée a été que la réponse est oui: pour chaque fonction calculable le problème "Sortie points" (ou créer une chaîne avec points ou autre) ne peut évidemment pas être résolu en temps. Il suffit donc de montrer qu'il peut être résolu en temps . Pas de problème, prenez simplement le pseudo code suivant:f ( n ) f ( n ) o ( f ( n ) ) O ( f ( n ) )FF(n)F(n)o(F(n))O(F(n))

x = f(n)
for i from 1 to x:
    output(".")

Il est clair que cet algorithme résout le problème déclaré. Et son exécution est évidemment dans , donc le problème est résolu. C'était facile, non? Sauf que non, ce n'est pas parce qu'il faut tenir compte du coût de la première ligne. L'exécution de l'algorithme ci-dessus est uniquement dans si le temps nécessaire pour calculer est dans . Ce n'est clairement pas vrai pour toutes les fonctions 1 .Θ ( f ( n ) ) f ( n ) O ( f ( n ) )Θ(F(n))Θ(F(n))F(n)O(F(n))

Cette approche ne m'a donc conduit nulle part. Je serais reconnaissant à tous ceux qui me pointent dans la bonne direction de comprendre cela correctement.


1 Considérons par exemple la fonction . Clairement O ( p ( n ) ) = O ( 1 ) , mais il n'y a pas d'algorithme qui calcule p en temps O ( 1 ) .p(n)={1si n est premier2autrementO(p(n))=O(1)pO(1)

sepp2k
la source
1
Je ne pense pas que vos deux déclarations dans vos premiers paragraphes soient nécessairement contraires l'une à l'autre: et si vous avez un tel qu'il existe un problème qui peut être résolu dans O ( f ( n ) ) , pas dans o ( f ( n ) ) , ni en temps Θ ( f ( n ) ) ? FO(F(n))o(F(n))Θ(F(n))
Alex ten Brink
@Alex C'est un bon point, je n'y ai pas pensé.
sepp2k

Réponses:

13

Par le théorème de Gap (en utilisant la formulation d' ici , cherchez 'gap'), pour toute fonction calculable non bornée , il existe une fonction calculable croissante (en fait, arbitrairement grande) f : NN telle que D T I M E ( f ( n ) ) = D T I M E ( g ( f ( n ) ) .g:NNf:NNDTIME(f(n))=DTIME(g(f(n))

Cela répond à votre question en ce qu'il existe un tel (infiniment grand, en fait): pour chaque fonction calculable g telle que g = o ( n ) , il existe une fonction croissante f telle que tous les problèmes résolubles en O ( f ( n ) ) les temps sont également résolubles en O ( g ( f ( n ) ) = o ( f ( n ) ) temps. Notez que ffgg=o(n)fO(f(n))O(g(f(n))=o(f(n))f n'est pas nécessairement constructible dans le temps - pour le cas constructible dans le temps, voir la réponse de @RanG.

Dans la formulation de Wikipédia (qui nécessite que ), alors g becomes f devient votre exemple, et f doit être ω ( n ) (donc vous allez dans l'autre sens - 'problèmes résolubles en O ( g ( f ( n ) ) sont également résolubles en O ( g ( n ) ) 'est la partie intéressante).g(x)xgfFω(n)O(g(f(n))O(g(n))

L'article de Wikipédia ne note pas que augmente et peut en fait être arbitrairement grand ( f ( n ) g ( n ) par exemple). L'article qui prouve le théorème de l' écart ne mentionne et le prouvent (voir ici , par exemple).ff(n)g(n)

Alex ten Brink
la source
peut-il être o ( n ) ? N'est-il pas nécessaire que g ( x ) x ? Votre déclaration est toujours correcte, mais la preuve va dans l'autre sens, non? go(n)g(x)x
Ran G.
@A sonné. Mis à jour pour donner une preuve pour les deux formulations (j'ai utilisé la formulation dans le papier) :)
Alex ten Brink
"pour toute fonction calculable g telle que g = o (n), il existe une fonction f telle que tous les problèmes résolubles en temps O (f (n)) sont également résolubles en O (g (f (n)) = o ( f (n)) time "Et si tous les fs qui existent pour ce g sont dans O (1)? Alors O (g (f (n)) est toujours O (1) et donc pas o (1).
sepp2k
@ sepp2k: bonne prise, c'est en effet un problème tel que formulé. J'ai mis à jour ma réponse.
Alex ten Brink
12

Pour chaque fonction calculable existe-t-il un problème qui peut être résolu au mieux en temps Θ ( f ( n ) ) ou existe-t-il une fonction calculable f telle que tout problème pouvant être résolu dans O ( f ( n ) ) peut également être résolu en o ( f ( n ) ) temps?fΘ(f(n))fO(f(n))o(f(n))

Si est une fonction constructible dans le temps , alors le théorème de la hiérarchie temporelle dit qu'il y a des problèmes qui nécessitent du temps O ( f ( n ) ) , et ne peuvent pas être résolus avec le temps o ( f ( n )fO(f(n)). Plus précisément, DTIME(o(f(n)o(f(n)log(f(n)))

DTIME(o(f(n)log(f(n))))DTIME(f(n))

Cela ne prend en compte que les problèmes de décision et ne tient pas compte du temps nécessaire pour générer la sortie.

A sonné.
la source
Ai-je raison de supposer que si l'on considère les fonctions non constructibles dans le temps, la réponse à ma question est "non"? Ou de manière similaire: si une fonction n'est pas constructible dans le temps et qu'il n'y a donc pas de machine de Turing qui s'arrête après f ( n ) étapes, cela signifie-t-il qu'il n'y a pas non plus de machine de Turing qui s'arrête après Θ ( f ( n ) ) étapes? Parce qu'il en résulterait trivialement que la réponse à ma question est non. FF(n)Θ(F(n))
sepp2k
Ça dépend. Supposons que ne soit pas constructible dans le temps mais peut être limité par une autre fonction g qui est constructible dans le temps. f = Θ ( g ) et il existe toujours des problèmes qui peuvent être résolus avec le temps O ( f ) mais pas trop moins que cela. fgf=Θ(g)O(F)
Ran G.
et en utilisant plusieurs TM de bande, vous pouvez améliorer le résultat de ào(f(n)). o(f(n)lgF(n))o(F(n))
Kaveh
3

J'essaierai de fournir quelque chose d'un cadre dans l'espoir qu'il donne une vision plus approfondie.

Lorsque vous arrivez à quelque chose d'aussi fondamental, il y a des pièges inattendus partout. Par exemple: qu'est-ce que "résoudre" un problème? Souvent en informatique, nous ne considérons que la variante "décision", dans laquelle nous recevons une entrée et n'avons besoin que de sortir Vrai ou Faux. Vous vous concentrez sur le problème de la "fonction".

Si vous considérez la notation O (f (n)) comme essayant de capturer la quantité de "travail" nécessaire pour résoudre un problème, utiliser la décision au lieu de la fonction (où la sortie est requise) semble préférable parce que vous séparez proprement le calcul de la mise en forme de la sortie .

Je ne pense pas que cela répondra à votre question, mais cela pourrait vous intéresser: http://en.wikipedia.org/wiki/Time_hierarchy_theorem

Faites également attention au théorème d'accélération .

agorenst
la source