À propos de cette question, je me suis demandé: quelle est la complexité temporelle pour une machine de Turing à une seule bande et à une seule tête pour calculer la longueur de son entrée? Pour être précis, disons que l'alphabet de la bande est , l'entrée est une chaîne en entourée de blancs, la machine démarre au symbole d'entrée le plus à gauche et doit se terminer à la symbole le plus à gauche d'une chaîne en (à nouveau entouré de blancs) qui donne la représentation binaire de la longueur d'entrée. Cela peut également être considéré comme le problème de la conversion d'un nombre d'unaire en binaire.
Il est facile de résoudre ce problème sur une machine à deux bandes ou à deux têtes en temps linéaire (il suffit de numériser l'entrée avec une tête tout en utilisant l'autre tête pour incrémenter plusieurs fois un compteur; l'incrémentation est une opération à temps amorti constant). Mais les solutions à tête unique que je peux proposer ne sont que (par exemple, incrémenter plusieurs fois un compteur et le déplacer d'une position le long de la bande). Y a-t-il une borne inférieure correspondante?
J'ai essayé quelques recherches, mais des expressions comme «une tête» et «longueur d'entrée» sont si courantes qu'il est difficile de rechercher dans la littérature des résultats connus sur ce problème.
la source
Réponses:
Il ne peut pas être calculé au temps .o(nlgn)
Soit une machine ayant donné une chaîne d'entrée x s'arrête avec la taille de x écrite en binaire sur la bande.M x x
Nous pouvons ajouter un DFA simple (temps linéaire à espace nul) à pour vérifier si la taille de l'entrée est une puissance de deux: vérifiez simplement que le premier bit est 1 et le reste est zéro.M
Supposons que exécute le temps o ( n lg n ) . On peut alors décider dans le temps o ( n lg n ) que la taille de l'entrée est une puissance de deux. En d'autres termes, le langage suivant est décidable en D T i m e ( n lg n ) . L = { 0 i ∣ ∃ k i = 2 k } Il résulte de D T i m e (M o(nlgn) o(nlgn) DTime(nlgn)
la source