Mam następujący problem algorytmiczny:
Określ przestrzeń Turinga złożoności rozpoznawania ciągów DNA, które są palindromami Watsona-Cricka.
Palindromy Watsona-Cricka to ciągi, których odwróconym dopełnieniem jest ciąg oryginalny. Dopełnieniem jest zdefiniowany litery mądry inspirowany DNA: A jest dopełnieniem T, a C jest dopełnieniem G. prosty przykład dla WC-palindrom jest ACGT.
Wymyśliłem dwa sposoby rozwiązania tego.
Jeden wymaga miejsca.
- Po zakończeniu pracy urządzenia odczytać dane wejściowe. Taśma wejściowa musi zostać skopiowana na taśmę roboczą w odwrotnej kolejności.
- Maszyna następnie odczyta taśmy wejściowe i robocze z lewej strony i porówna każdy wpis, aby sprawdzić, czy komórka na taśmie roboczej jest komplementem komórki na wejściu. Wymaga to spacji .
Drugi wymaga miejsca .
- Podczas czytania wejścia. Policz liczbę wpisów na taśmie wejściowej.
- Po zakończeniu odczytu taśmy wejściowej
- skopiuj dopełnienie litery na taśmę roboczą
- skopiuj literę L na koniec taśmy roboczej
- (Punkt pętli) Jeśli licznik = 0, wyczyść taśmę roboczą i napisz tak, a następnie zatrzymaj
- Jeśli taśma wejściowa ma wartość L
- Przesuń głowicę wejściową w lewo o liczbę razy wskazaną przez licznik (wymaga drugiego licznika)
- Jeśli taśma wejściowa ma wartość R
- Przesuń głowicę wejściową w prawo o liczbę razy wskazaną przez licznik (wymaga drugiego licznika)
- Jeśli komórka przechowująca wartość na taśmie roboczej pasuje do bieżącej komórki na taśmie wejściowej
- zmniejsz licznik o dwa
- Przesuń jeden w lewo lub w prawo w zależności od tego, czy R lub L znajdują się odpowiednio na taśmie roboczej
- skopiuj Uzupełnienie L lub R na arkusz roboczy zamiast aktualnego L lub R.
- kontynuować pętlę
- Jeśli wartości się nie zgadzają, wyczyść taśmę roboczą i napisz nie, a następnie zatrzymaj
Wynika to z około miejsca do przechowywania obu liczników, aktualnego uzupełnienia oraz wartości L lub R.
Mój problem
Pierwszy wymaga zarówno czasu liniowego, jak i przestrzeni. Drugi wymaga czasu i spacji. Dostałem problem z cytatu i wymyśliłem te dwa podejścia, ale nie wiem, z którego wybrać. Muszę tylko nadać przestrzeni złożoność problemu. logn
Powód, dla którego jestem zdezorientowany
Powiedziałbym, że druga jest najlepszą opcją, ponieważ jest lepsza pod względem czasu, ale ta odpowiedź pochodzi tylko od mojego szczęścia i wymyślenia algorytmu. Wygląda na to, że jeśli chcę nadać przestrzeni coś złożoności, nie wymagałoby szczęścia w znalezieniu odpowiedniego algorytmu. Czy coś brakuje? Czy powinienem nawet wymyślić rozwiązanie problemu, aby rozwiązać złożoność przestrzeni?