Pourquoi cette fonction est-elle calculable en temps


10

Mon manuel dit: "Nous définissons la fonction comme suit: f ( 1 ) = 2 et f ( i + 1 ) = 2 f ( i ) 1.2 . Notez que étant donné n , nous pouvons facilement trouver dans O ( n 1,5 ) fois le nombre i tel que n soit pris en sandwich entre f ( i ) et f ( i + 1f:NNf(1)=2f(i+1)=2f(i)1.2nO(n1.5)inf(i) . "f(i+1)

Comment puis-je me convaincre que nous pouvons en fait facilement trouver en temps O ( n 1,5 ) ? Comme f est défini récursivement, je pense que nous devons calculer f ( 1 ) , f ( 2 ) , f ( 3 ) f ( j ) jusqu'à f ( j ) n . Afin de connaître le temps que prennent ces calculs, je pense que nous devons trouver une borne supérieure appropriée pour i dépendant de niO(n1.5)ff(1),f(2),f(3)f(j)f(j)ninet nous devons trouver une borne supérieure sur le temps d'exécution de la fonction . En fin de compte, nous pouvons espérer montrer la proposition citée. Malheureusement, je ne vois ni une chose ni l'autre.x2x1.2

J'ai oublié de mentionner: veuillez noter que nous sommes dans un contexte non déterministe. Donc est supposé être calculable dans O ( n 1.5 ) par une machine de Turing non déterministe.fO(n1.5)


Étant donné que bon nombre de personnes ont déjà lu cette question, certaines d’entre elles la trouvant utile et intéressante également, mais personne n’a répondu jusqu’à présent, je souhaite fournir plus d’informations sur le contexte: la déclaration citée fait partie intégrante de la preuve de le théorème de la hiérarchie temporelle non déterministe. La preuve (avec la réclamation) peut être trouvée par exemple dans le livre d'Arora et Barak , mais j'ai trouvé pas mal d'autres ressources sur le Web qui présentent la même preuve. Chacun de ceux-ci appelle la revendication facile ou triviale et ne précise pas comment trouver en temps O ( n 1,5 ) . Donc, soit toutes ces ressources viennent d'être copiées depuis Arora et Barak, soit la revendication n'est en fait pas si difficile.iO(n1.5)


1
Cela ressemble à la preuve du théorème de la hiérarchie temporelle non déterministe dans Arora & Barak, n'est-ce pas? Si c'est le cas, je suppose que le non-déterminisme joue un rôle ici.
G. Bach

Tu as raison. Désolé pour cela, j'aurais dû mentionner le contexte non déterministe. Pouvez-vous expliquer plus en détail comment le non-déterminisme nous aide à montrer la limite O (n ^ 1,5)?
user1494080

Réponses:


4

Désigner par la longueur d'un nombre x , soit log 2 x + 1 (pour x > 0 ). Le calcul de 2 x nécessite le temps O ( x ) dans le modèle RAM, et donc le calcul de f ( i + 1 ) à partir de f ( i ) prend du temps O ( f ( i ) 1,2 ) = O ( | f|x|xlog2x+1x>02xO(x)f(i+1)f(i) . Puisque f ( i ) croît plus rapidement que géométriquement, le temps global pour calculer f ( i + 1 ) est O ( | f ( i + 1 ) | ) . Comme vous le faites remarquer, vous devez le faire jusqu'à ce que f ( i + 1 ) n , ce qui signifie que f ( i ) < n . Par conséquent, la durée totale de fonctionnement estO(f(i)1.2)=O(|f(i+1)|)f(i)f(i+1)O(|f(i+1)|)f(i+1)nf(i)<n .O(|f(i+1)|)=O(f(i)1.2)=O(n1.2)

Dans le modèle de machine de Turing avec une seule bande, le calcul de prend le temps O ( x log x ) , et donc le temps de fonctionnement total est O ( n 1,2 log n ) = O ( n 1,5 ) . L'algorithme de calcul de 2 x remplace [ x ] par 1 [ [ x ] ] (ici [ x ] est la représentation binaire de x et [ [2xO(xlogx)O(n1.2logn)=O(n1.5)2x[x]1[[x]][x]x est la représentation binaire utilisant différents chiffres 0 , 1 ), puis exécute à plusieurs reprises la transformation [ [ x ] ] 0 [ [ x - 1 ] ] , ce qui prend du temps O ( | x | ) = O ( log x ) .[[x]]0,1[[x]]0[[x1]]O(|x|)=O(logx)


Parfait merci! Une autre question: ne devons-nous pas dire que | f (i) | croît plus vite que géométriquement plutôt que f (i) croît plus vite que géométriquement?
user1494080

Depuis , c'est la même chose, mais vous avez raison. Ce que nous voulons vraiment, c'est j i | f ( j ) | = O ( | f ( i ) | ) . |f(i+1)|=f(i)1.2ji|f(j)|=O(|f(i)|)
Yuval Filmus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.