Złożoność przestrzeni rozpoznawania palindromów Watsona-Cricka


10

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.O(n)

  • 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 .O(n)

Drugi wymaga miejsca .O(logn)

  • 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.2logn+2

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. lognn22logn

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?


Myślę, że pytanie byłoby jeszcze lepsze, gdybyś podał pseudokod dla algorytmów. Zajrzyj tutaj, aby uzyskać pomoc na temat formatowania.
Raphael

Odpowiedzi:


8

Oświadczenie : Poniższy algorytm nie używa standardowego modelu złożoności sublinearnej przestrzeni (patrz WP: DSPACE ), ponieważ zapisuje na taśmie wejściowej. Ponadto zestawu palindromów (Watson-Crick) nie ma w . Niemniej jednak jest to rozwiązanie na miejscu do wielu praktycznych celów (np. Jeśli każda litera jest literą C).DSPACE(O(1))=REGchar

Aby pokazać, że problem ma określoną złożoność przestrzeni, ogólnie trzeba wymyślić algorytm o tej złożoności przestrzeni. Może to wymagać prób i błędów, ale lepszym rozwiązaniem jest dobre zrozumienie problemu, na który patrzysz, oraz duże doświadczenie w zakresie algorytmów i złożoności.

W tym konkretnym przykładzie istnieje trzeci algorytm, który nie wymaga dodatkowej przestrzeni i wymaga złożoności czasowej . Ten algorytm byłby stałą przestrzenią.O(n2)

Wskazówka: po co używać dodatkowej przestrzeni, skoro można wykorzystać przestrzeń zajmowaną przez dane wejściowe?

Wskazówka: przesuwaj suwak w przód i w tył sprawdzając po jednym znaku na raz - użyj stanu maszyny Turinga, aby zapamiętać, który znak sprawdzasz, i usuń znaki, które już sprawdziłeś.


to właśnie robi mój drugi algorytm. Aby poruszać się po łańcuchu w przód iw tył, potrzebujesz liczników. Do wprowadzenia długości potrzebujesz log n miejsca do przechowywania licznika. Chyba, że ​​się mylę, ale wygląda na to, że nie można iść w tę iz powrotem bez struny, która część została porównana
tylko

3
Dlaczego musisz przechowywać licznik?
Dave Clarke

Jeśli dojdę do końca wejścia i ma on 10 znaków. Muszę cofnąć się o 10 znaków i zapisać ostatni znak na wejściu. Gdy przejdę do początku, porównuję i kopiuję drugą postać i 7 razy przesuwam się w prawo i sprawdzam, czy druga postać pasuje do 9. Skąd mam wiedzieć, że to 7 razy, chyba że nadążam?
justausr

1
Głowa może znajdować się tylko w jednym miejscu na taśmie na raz, ale stan TM może zapamiętać to, co widziała głowa, i można oznaczyć taśmę innymi znakami, aby wskazać, które części taśmy już odwiedzono ( w niektórych fazach algorytmu).
Dave Clarke

1
Nie rozumiem o co ci chodzi. Jeśli kasujesz lub zaznaczasz znaki w strumieniu wejściowym (tym samym znakiem), możesz łatwo określić, kiedy zakończysz przetwarzanie ciągu wejściowego, ponieważ zabrakło ciągu wejściowego.
Dave Clarke

3

Sposób, w jaki pytanie jest zadawane, powinien wymyślić górną granicę i dolną granicę złożoności przestrzeni.

Pierwsza część jest zwykle wykonywane przez przedstawienie algorytmu dla problemu, ale zmniejszenie do innego dobrze badanego problemu byłoby również praca (i pośrednio wydajność algorytmu, zbyt). Ponieważ nie bierzesz pod uwagę złożonej złożoności (czasu i przestrzeni), tylko przestrzeń ma znaczenie, nawet jeśli czas się wydłuża. Znalazłeś więc górną granicę .O(logn)

Druga część jest zwykle dużo trudniejsza, ale możesz łatwo pokazać, że stała przestrzeń nie wystarcza, ponieważ dzięki temu Twój język będzie regularny. Używając lematu pompowania z, powiedzmy , gdzie jest założoną liczbą pompowania załatwi sprawę. To wciąż pozostawia dużą lukę między a . l ω ( 1 ) O ( log n )alb2lallω(1)O(logn)

Znalazłem ćwiczenie (patrz Ćwiczenie 6), które daje pewne wskazówki. Jeśli poprawnie interpretuję ich wskazówkę, spróbuj udowodnić, że istnieje wiele różnych klas równoważności relacji Myhill-Nerode dla każdego rozmiaru wejściowego. Jest to podobne do argumentu, że nie można odróżnić więcej niż ciągów o długości (gdzie to alfabet taśmy, a złożoność przestrzeni). To da ci dolną granicę . n Γ s ( n ) Ω ( log n )cΓs(n)nΓs(n)Ω(logn)


Pamiętaj, że nie musisz przejmować się dopełnianiem liter, ponieważ ta operacja jest banalna, więc wszystko, co działa dla zwykłych palindromów, można zmodyfikować kilkoma dodatkowymi stanami, aby rozwiązać problem.


0

Jest bardzo prawdopodobne, że klasyczny kompromis czasu i przestrzeni dla palindromów ma również miejsce w twoim przypadku. Ten wynik stwierdza, że ​​maszyna Turinga rozpoznająca palindromy w przestrzeni musi zająć czas , tj. W twoim przypadku pierwszy algorytm ma , a drugi ma . Można również pokazać, że dolna granica przestrzeni to . Nie byłem w stanie znaleźć najlepszej górnej granicy - to znaczy, czy istnieje algorytm wykorzystujący przestrzeń logarytmiczną i czas , czy ogólnie dla jakich wartościΩ ( n 2 / S ) Czas × Spacja = Ω ( n 2 ) . T S = Θ ( n 2 ) T S = Θ ( n 2 log n ) Ω ( log n ) O ( n 2 / log n ) S Ω ( n 2 / S )SΩ(n2/S)

Time×Space=Ω(n2).
TS=Θ(n2)TS=Θ(n2logn)Ω(logn)O(n2/logn)Sczy możemy osiągnąć czas . W ramach ćwiczenia możesz spróbować znaleźć inne hybrydowe algorytmy interpolujące dwa algorytmy.Ω(n2/S)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.