У меня есть следующая алгоритмическая проблема:
Определить сложность пространства Тьюринга распознавания цепочек ДНК, которые являются палиндромами Уотсона-Крика.
Палиндромы Уотсона-Крика - это строки, обратным дополнением которых является исходная строка. Дополнением определяется буква-накрест, вдохновленный ДНК: А является дополнением Т и С является дополнением Г. Простой пример для WC-палиндром ACGT.
Я придумал два способа решения этой проблемы.
Один требует пространства.
- Как только машина закончит чтение ввода. Входная лента должна быть скопирована на рабочую ленту в обратном порядке.
- Затем устройство будет читать входные и рабочие ленты слева и сравнивать каждую запись, чтобы убедиться, что ячейка на рабочей ленте является дополнением ячейки на входе. Это требует места.
Другой требует места.
- Пока читаю вход. Подсчитайте количество записей на входной ленте.
- Когда входная лента закончит чтение
- скопировать дополнение письма на рабочую ленту
- скопируйте букву L в конец рабочей ленты
- (Точка цикла) Если счетчик = 0, очистите рабочую ленту и напишите «да», затем остановите
- Если входная лента читает L
- Переместите входную головку влево на количество раз, указанное счетчиком (требуется второй счетчик)
- Если входная лента читает R
- Переместите входную головку вправо на количество раз, указанное счетчиком (требуется второй счетчик)
- Если ячейка, содержащая значение на рабочей ленте, совпадает с текущей ячейкой на входной ленте
- уменьшить счетчик на два
- Переместите один влево или вправо в зависимости от того, находятся ли R или L на рабочем столе соответственно
- скопировать дополнение L или R на рабочую ленту вместо текущего L или R
- продолжить цикл
- Если значения не совпадают, очистите рабочую ленту и напишите «нет», затем остановите
Получается около места для хранения обоих счетчиков, текущего дополнения и значения L или R.
Моя проблема
Первый требует как линейного времени, так и пространства. Второй требует времени и пространства. Я получил проблему из цитаты и предложил эти два подхода, но я не знаю, какой выбрать. Мне просто нужно дать пространственную сложность проблемы. logn
Причина, по которой я запутался
Я бы сказал, что второй вариант - лучший вариант, так как он лучше с точки зрения времени, но этот ответ приходит только от того, что мне повезло и я придумал алгоритм. Кажется, что если я хочу дать пространственную сложность чего-то, это не потребует удачи в выборе правильного алгоритма. Я что-то пропустил? Должен ли я даже придумать решение проблемы, чтобы ответить на сложность пространства?
Ответы:
Отказ от ответственности : следующий алгоритм не использует стандартную модель для сложности сублинейного пространства (см. WP: DSPACE ), потому что он записывает данные на ленту ввода. Кроме того, набор палиндромов (Уотсона-Крика) не находится в . Тем не менее, это решение на месте для многих практических целей (например, если каждая буква в C).DSPACE(O(1))=REG
char
Чтобы показать, что проблема имеет определенную пространственную сложность, обычно нужно придумать алгоритм, который имеет эту пространственную сложность. Это может потребовать проб и ошибок, но лучшим подходом является хорошее понимание проблемы, которую вы рассматриваете, и большой опыт работы с алгоритмами и сложностью.
Для этого конкретного примера существует третий алгоритм, который не требует дополнительного пространства и требует временной сложности. Этот алгоритм будет постоянным пространством.O(n2)
Подсказка: зачем использовать дополнительное пространство, если вы можете использовать пространство, занимаемое вводом?
Подсказка: перемещайтесь по строке вперед и назад, проверяя по одному символу за раз - используйте состояние машины Тьюринга, чтобы запомнить, какой символ вы проверяете, и удалите уже проверенные символы.
источник
При задании вопроса вы должны придумать верхнюю и нижнюю границы сложности пространства.
Первая часть обычно выполняется путем представления алгоритма для вашей задачи, но также может работать сокращение до некоторой другой хорошо изученной проблемы (и косвенно также приводить алгоритм). Поскольку вы не учитываете сложную сложность (время и пространство), имеет значение только пространство, даже если время увеличивается. Итак, вы нашли верхнюю границу .O(logn)
Вторая часть обычно намного сложнее, но вы можете легко показать, что постоянного места недостаточно, потому что это сделает ваш язык регулярным. Используя лемму прокачки с, скажем, , где - предполагаемое число закачки, добьемся цели. Это все еще оставляет большой разрыв между и . l ω ( 1 ) O ( log n )alb2lal l ω(1) O(logn)
Я нашел упражнение (см. Упражнение 6), которое дает некоторые подсказки. Если я правильно интерпретирую их подсказку, попробуйте доказать, что существует много разных классов эквивалентности отношения Myhill-Nerode для каждого входного размера. Это похоже на аргумент о том, что вы не можете различить больше, чем строк длины (где - алфавит вашей ленты, а сложность пространства). Это даст вам нижнюю границу .c⋅Γs(n) n Γ s(n) Ω(logn)
Обратите внимание, что вам не нужно заботиться о дополнении букв, поскольку эта операция тривиальна, поэтому все, что работает для обычных палиндромов, может быть изменено с помощью нескольких состояний для решения вашей проблемы.
источник
Весьма вероятно, что классический компромисс между временем и пространством для палиндромов имеет место и в вашем случае. Этот результат утверждает, что машина Тьюринга, распознающая палиндромы в пространстве должна занять время , то есть В вашем случае первый алгоритм имеет , а второй - . Можно также показать, что нижняя оценка пространства равна . Я не смог найти лучшую верхнюю границу, то есть есть ли алгоритм, использующий логарифмическое пространство и время , или вообще для каких значенийΩ ( 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)
источник