J'ai le problème algorithmique suivant:
Déterminer l'espace Turing complexité de reconnaître les chaînes d'ADN qui sont des palindromes Watson-Crick.
Les palindromes Watson-Crick sont des chaînes dont le complément inversé est la chaîne d'origine. Le complément est défini par lettre, inspiré de l'ADN: A est le complément de T et C est le complément de G. Un exemple simple pour un palindrome WC est ACGT.
J'ai trouvé deux façons de résoudre ce problème.
L'un nécessite un espace .
- Une fois que la machine a fini de lire l'entrée. La bande d'entrée doit être copiée sur la bande de travail dans l'ordre inverse.
- La machine lira ensuite les bandes d'entrée et de travail à partir de la gauche et comparera chaque entrée pour vérifier que la cellule dans la bande de travail est le complément de la cellule dans l'entrée. Cela nécessite un espace .
L'autre nécessite un espace .
- Lors de la lecture de l'entrée. Comptez le nombre d'entrées sur la bande d'entrée.
- Lorsque la lecture de la bande d'entrée est terminée
- copier le complément de la lettre sur la bande de travail
- copiez la lettre L à la fin de la bande de travail
- (Point de boucle) Si le compteur = 0, effacez la bande de travail et écrivez oui, puis arrêtez
- Si la bande d'entrée indique L
- Déplacer la tête d'entrée vers la gauche du nombre de fois indiqué par le compteur (nécessite un deuxième compteur)
- Si la bande d'entrée indique R
- Déplacer la tête d'entrée vers la droite du nombre de fois indiqué par le compteur (nécessite un deuxième compteur)
- Si la cellule qui contient la valeur sur la bande de travail correspond à la cellule actuelle sur la bande d'entrée
- décrémenter le compteur de deux
- Déplacez-en un vers la gauche ou la droite selon que R ou L est sur la bande de travail respectivement
- copier le complément de L ou R sur la bande de travail à la place du L ou R actuel
- continue la boucle
- Si les valeurs ne correspondent pas, effacez la bande de travail et écrivez non, puis arrêtez
Cela revient à environ espace pour stocker les deux compteurs, le complément actuel et la valeur L ou R.
Mon problème
Le premier nécessite à la fois du temps et de l'espace linéaires. La seconde nécessite temps et espace. On m'a donné le problème de la citation et j'ai proposé ces deux approches, mais je ne sais pas laquelle choisir. J'ai juste besoin de donner la complexité spatiale du problème.
La raison pour laquelle je suis confus
J'aurais tendance à dire que la seconde est la meilleure option car elle est meilleure en termes de temps, mais cette réponse ne vient que de ma chance et de l'élaboration d'un algorithme. Il semble que si je veux donner la complexité spatiale de quelque chose, il ne faudrait pas de chance pour trouver le bon algorithme. Suis-je en train de manquer quelque chose? Dois-je même trouver une solution au problème pour répondre à la complexité de l'espace?
Réponses:
Avertissement : L'algorithme suivant n'utilise pas le modèle standard pour la complexité de l'espace sublinéaire (voir WP: DSPACE ), car il écrit sur la bande d'entrée. De plus, l'ensemble des palindromes (Watson-Crick) n'est pas dans . Néanmoins, c'est une solution sur place à de nombreuses fins pratiques (par exemple, si chaque lettre est un en C).DSPACE(O(1))=REG
char
Pour montrer qu'un problème a une complexité d'espace spécifique, il faut généralement trouver un algorithme qui a cette complexité d'espace. Cela peut nécessiter des essais et des erreurs, mais une meilleure approche consiste à avoir une bonne compréhension du problème que vous regardez et une bonne expérience des algorithmes et de la complexité.
Pour cet exemple particulier, il existe un troisième algorithme qui ne nécessite aucun espace supplémentaire et nécessite une complexité temporelle . Cet algorithme serait à espace constant.O(n2)
Astuce: pourquoi utiliser de l'espace supplémentaire, quand vous pouvez utiliser l'espace occupé par l'entrée?
Astuce: zippez dans la chaîne en vérifiant un caractère à la fois - utilisez l'état de la machine de Turing pour vous souvenir du caractère que vous vérifiez et effacez les caractères que vous avez déjà vérifiés.
la source
La façon dont la question est posée, vous devriez trouver une limite supérieure et une limite inférieure sur la complexité de l'espace.
La première partie se fait généralement en présentant un algorithme pour votre problème, mais une réduction à un autre problème bien étudié fonctionnerait également (et produirait indirectement un algorithme aussi). Puisque vous ne considérez pas une complexité combinée (temps et espace), seul l'espace compte, même si le temps augmente. Vous avez donc trouvé une limite supérieure de .O(logn)
La deuxième partie est généralement beaucoup plus délicate, mais vous pouvez facilement montrer qu'un espace constant n'est pas suffisant, car cela rendrait votre langue régulière. En utilisant le lemme de pompage avec, disons , où est le nombre de pompage supposé fera l'affaire. Cela laisse encore un grand écart entre et .alb2lal l ω(1) O(logn)
J'ai trouvé un exercice (voir exercice 6) qui donne quelques indices. Si j'interprète correctement leur indice, essayez de prouver qu'il existe de nombreuses classes d'équivalence différentes de la relation Myhill-Nerode pour chaque taille d'entrée. Ceci est similaire à l'argument selon lequel vous ne pouvez pas distinguer plus de chaînes de longueur (où est votre alphabet de bande et votre complexité d'espace). Cela vous donnera une limite inférieure de .c⋅Γs(n) n Γ s(n) Ω(logn)
Notez que vous n'avez pas besoin de vous soucier du complément de lettres car cette opération est triviale, donc tout ce qui fonctionne pour les palindromes ordinaires peut être modifié avec quelques états supplémentaires pour résoudre votre problème.
la source
Il est extrêmement probable que le compromis temps-espace classique pour les palindromes se vérifie également dans votre cas. Ce résultat indique qu'une machine de Turing reconnaissant des palindromes dans l'espace doit prendre du temps , c'est-à-dire Dans votre cas, le premier algorithme a et le second a . On peut également montrer que la limite inférieure de l'espace est . Je n'ai pas pu trouver quelle est la meilleure borne supérieure - c'est-à-dire s'il existe un algorithme utilisant l'espace et le temps logarithmique , ou en général, pour quelles valeurs deS Ω(n2/S)
la source