Пространственная сложность распознавания палиндромов Уотсона-Крика

10

У меня есть следующая алгоритмическая проблема:

Определить сложность пространства Тьюринга распознавания цепочек ДНК, которые являются палиндромами Уотсона-Крика.

Палиндромы Уотсона-Крика - это строки, обратным дополнением которых является исходная строка. Дополнением определяется буква-накрест, вдохновленный ДНК: А является дополнением Т и С является дополнением Г. Простой пример для WC-палиндром ACGT.

Я придумал два способа решения этой проблемы.

Один требует пространства.O(n)

  • Как только машина закончит чтение ввода. Входная лента должна быть скопирована на рабочую ленту в обратном порядке.
  • Затем устройство будет читать входные и рабочие ленты слева и сравнивать каждую запись, чтобы убедиться, что ячейка на рабочей ленте является дополнением ячейки на входе. Это требует места.O(n)

Другой требует места.O(logn)

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

Получается около места для хранения обоих счетчиков, текущего дополнения и значения L или R.2logn+2

Моя проблема

Первый требует как линейного времени, так и пространства. Второй требует времени и пространства. Я получил проблему из цитаты и предложил эти два подхода, но я не знаю, какой выбрать. Мне просто нужно дать пространственную сложность проблемы. lognn22logn

Причина, по которой я запутался

Я бы сказал, что второй вариант - лучший вариант, так как он лучше с точки зрения времени, но этот ответ приходит только от того, что мне повезло и я придумал алгоритм. Кажется, что если я хочу дать пространственную сложность чего-то, это не потребует удачи в выборе правильного алгоритма. Я что-то пропустил? Должен ли я даже придумать решение проблемы, чтобы ответить на сложность пространства?

justausr
источник
Я думаю, что вопрос был бы еще лучше, если бы вы дали псевдокод для алгоритмов. Ищите здесь помощь по форматированию.
Рафаэль

Ответы:

8

Отказ от ответственности : следующий алгоритм не использует стандартную модель для сложности сублинейного пространства (см. WP: DSPACE ), потому что он записывает данные на ленту ввода. Кроме того, набор палиндромов (Уотсона-Крика) не находится в . Тем не менее, это решение на месте для многих практических целей (например, если каждая буква в C).DSPACE(O(1))=REGchar

Чтобы показать, что проблема имеет определенную пространственную сложность, обычно нужно придумать алгоритм, который имеет эту пространственную сложность. Это может потребовать проб и ошибок, но лучшим подходом является хорошее понимание проблемы, которую вы рассматриваете, и большой опыт работы с алгоритмами и сложностью.

Для этого конкретного примера существует третий алгоритм, который не требует дополнительного пространства и требует временной сложности. Этот алгоритм будет постоянным пространством.O(n2)

Подсказка: зачем использовать дополнительное пространство, если вы можете использовать пространство, занимаемое вводом?

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

Дэйв Кларк
источник
вот что делает мой второй алгоритм. Чтобы идти вперед и назад через строку, вам нужны счетчики. Для ввода длины вам нужно зарегистрировать n n space для хранения счетчика. Если только я не неправильно понял, но кажется, что вы не можете переходить туда-сюда по строке, не отслеживая, какая часть была сравнена
justausr
3
Зачем вам нужно хранить счетчик?
Дейв Кларк
Если я достигну конца ввода и его длина будет 10 символов. Мне нужно вернуться назад на 10 символов и сохранить, каким был последний символ на входе. Как только я доберусь до начала, я сравниваю и копирую второй символ, перемещаюсь вправо 7 раз и проверяю, соответствует ли второй символ 9-му. Откуда я знаю, что это 7 раз, если я не успеваю за этим?
justausr
1
Голова может быть только в одном месте на ленте за раз, но состояние ТМ может запомнить то, что увидела голова, и можно пометить ленту другими символами, чтобы указать, какие части ленты уже были посещены ( в определенных фазах алгоритма).
Дейв Кларк
1
Я не понимаю, что вы имеете в виду. Если вы стираете или помечаете символы во входном потоке (с одинаковой меткой), вы можете легко определить, когда вы закончили обработку входной строки, поскольку у вас закончилась входная строка.
Дейв Кларк
3

При задании вопроса вы должны придумать верхнюю и нижнюю границы сложности пространства.

Первая часть обычно выполняется путем представления алгоритма для вашей задачи, но также может работать сокращение до некоторой другой хорошо изученной проблемы (и косвенно также приводить алгоритм). Поскольку вы не учитываете сложную сложность (время и пространство), имеет значение только пространство, даже если время увеличивается. Итак, вы нашли верхнюю границу .O(logn)

Вторая часть обычно намного сложнее, но вы можете легко показать, что постоянного места недостаточно, потому что это сделает ваш язык регулярным. Используя лемму прокачки с, скажем, , где - предполагаемое число закачки, добьемся цели. Это все еще оставляет большой разрыв между и . l ω ( 1 ) O ( log n )alb2lallω(1)O(logn)

Я нашел упражнение (см. Упражнение 6), которое дает некоторые подсказки. Если я правильно интерпретирую их подсказку, попробуйте доказать, что существует много разных классов эквивалентности отношения Myhill-Nerode для каждого входного размера. Это похоже на аргумент о том, что вы не можете различить больше, чем строк длины (где - алфавит вашей ленты, а сложность пространства). Это даст вам нижнюю границу .cΓs(n)nΓs(n)Ω(logn)


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

frafl
источник
0

Весьма вероятно, что классический компромисс между временем и пространством для палиндромов имеет место и в вашем случае. Этот результат утверждает, что машина Тьюринга, распознающая палиндромы в пространстве должна занять время , то есть В вашем случае первый алгоритм имеет , а второй - . Можно также показать, что нижняя оценка пространства равна . Я не смог найти лучшую верхнюю границу, то есть есть ли алгоритм, использующий логарифмическое пространство и время , или вообще для каких значенийΩ ( n 2 / S ) Время × Пространство = Ω ( 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)Sмы можем достичь времени . В качестве упражнения вы можете попробовать найти другие гибридные алгоритмы, интерполирующие ваши два алгоритма.Ω(n2/S)
Юваль Фильмус
источник