Космічна складність розпізнавання паліндромів Уотсона-Крика


10

У мене є така алгоритмічна проблема:

Визначте простір Тюрінга щодо складності розпізнавання струн ДНК, які є паліндромами Уотсона-Крика.

Паліндром Уотсона-Крика - це струни, перевернутим доповненням яких є оригінальний рядок. Доповненням визначається буква-навхрест, натхненний ДНК: А є доповненням Т і С є доповненням Г. Простий приклад для WC-паліндром ACGT.

Я придумав два способи вирішення цього питання.

Для одного потрібен простір.O(n)

  • Як тільки машина закінчена, читаючи вхід. Вхідна стрічка повинна бути скопійована на робочу стрічку у зворотному порядку.
  • Потім машина прочитає ліві вхідні та робочі стрічки і порівняє кожен запис, щоб переконатися, що комірка в робочій стрічці є компліментом комірки на вході. Для цього потрібен простір.O(n)

Інший вимагає простору .O(logn)

  • Під час читання введення. Порахуйте кількість записів на вхідній стрічці.
  • Коли введення стрічки робиться читанням
    • скопіюйте додаток листа на робочу стрічку
    • скопіюйте букву L на кінець робочої стрічки
  • (Точка циклу) Якщо лічильник = 0, очистіть робочу стрічку і напишіть так, тоді зупиніть
  • Якщо на вхідній стрічці звучить L
    • Перемістіть вхідну головку вліво на кількість разів, вказаних лічильником (потрібен другий лічильник)
  • Якщо вхідна стрічка зчитує R
    • Перемістіть вхідну головку праворуч на кількість разів, вказаних лічильником (потрібен другий лічильник)
  • Якщо комірка, яка містить значення на робочій стрічці, відповідає поточній комірці на вхідній стрічці
    • декремент лічильника на два
    • Перемістіть його вліво або вправо залежно від того, якщо R або L на робочій стрічці відповідно
    • скопіюйте доповнення L або R на робочу стрічку замість поточного L або R
    • продовжуйте цикл
  • Якщо значення не збігаються, очистіть робочу стрічку і напишіть ні, тоді зупиніть

2logn+2

Моє питання

n22logn

Причину я плутаю

Я схильний би сказати, що другий - найкращий варіант, оскільки він кращий з точки зору часу, але ця відповідь приходить лише від того, що мені пощастить і придумаю алгоритм. Схоже, що якщо я хочу надати простору складність чогось, це не вимагатиме удачі в розробці правильного алгоритму. Я щось пропускаю? Чи потрібно мені навіть вирішити проблему, щоб відповісти на складність простору?


Я думаю, що питання було б ще краще, якби ви дали псевдокод для алгоритмів. Зверніться сюди за допомогою щодо форматування.
Рафаель

Відповіді:


8

DSPACE(O(1))=REGchar

Щоб показати, що проблема має специфічну складність простору, потрібно загалом придумати алгоритм, який має цю просторову складність. Це може зажадати проб і помилок, але кращий підхід полягає в тому, щоб добре зрозуміти проблему, яку ви шукаєте, і великий досвід роботи з алгоритмами та складністю.

O(n2)

Підказка: навіщо використовувати додатковий простір, коли ви можете використовувати простір, зайнятий входом?

Підказка: перескакуйте вперед і назад по рядку, перевіряючи один символ за часом - використовуйте стан машини Тьюрінга, щоб запам'ятати, який символ ви перевіряєте, і стерти символи, які ви вже перевірили.


ось що робить мій другий алгоритм. Для переходу вперед і назад по рядку потрібні лічильники. Для введення довжини вам потрібен простір для зберігання лічильника. Якщо я не розумію, але здається, що ви не могли б повертатися вперед і назад по струні, не відстежуючи, з якою частиною порівнювали
justausr

3
Для чого потрібно зберігати лічильник?
Дейв Кларк

Якщо я досягне кінця вводу, і це 10 символів. Мені потрібно повернутися 10 символів і зберегти те, що було останнім символом на вході. Як тільки я добираюся до початку, я порівнюю та копіюю другий символ у та рухаюся вправо 7 разів та переконуюсь, що другий символ відповідає 9-му. Як я можу знати, що це 7 разів, якщо я не встигав за цим?
justausr

1
Голова може одночасно знаходитися в одному місці на стрічці, але стан ТМ може запам'ятати те, що голова бачив, і можна позначити стрічку іншими символами, щоб вказати, які частини стрічки вже відвідували ( на певних фазах алгоритму).
Дейв Кларк

1
Я не бачу, що ти маєш на увазі. Якщо ви стираєте або маркуєте символи у вхідному потоці (з однаковою міткою), ви зможете легко визначити, коли закінчите обробляти вхідний рядок, оскільки у вас закінчується рядок введення.
Дейв Кларк

3

Як ви задаєте питання, вам слід придумати верхню і нижню межі щодо складності простору.

O(logn)

alb2lallω(1)O(logn)

cΓs(n)nΓs(n)Ω(logn)


Зауважте, що вам не потрібно дбати про доповнення листів, оскільки ця операція є тривіальною, тому все, що працює для звичайних паліндром, можна змінити ще кількома станами, щоб вирішити вашу проблему.


0

SΩ(n2/S)

Time×Space=Ω(n2).
TS=Θ(n2)TS=Θ(n2logn)Ω(logn)O(n2/logn)SΩ(n2/S)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.