У меня есть следующая алгоритмическая проблема:
Определить сложность пространства Тьюринга распознавания цепочек ДНК, которые являются палиндромами Уотсона-Крика.
Палиндромы Уотсона-Крика - это строки, обратным дополнением которых является исходная строка. Дополнением определяется буква-накрест, вдохновленный ДНК: А является дополнением Т и С является дополнением Г. Простой пример для WC-палиндром ACGT.
Я придумал два способа решения этой проблемы.
Один требует пространства.
- Как только машина закончит чтение ввода. Входная лента должна быть скопирована на рабочую ленту в обратном порядке.
- Затем устройство будет читать входные и рабочие ленты слева и сравнивать каждую запись, чтобы убедиться, что ячейка на рабочей ленте является дополнением ячейки на входе. Это требует места.
Другой требует места.
- Пока читаю вход. Подсчитайте количество записей на входной ленте.
- Когда входная лента закончит чтение
- скопировать дополнение письма на рабочую ленту
- скопируйте букву L в конец рабочей ленты
- (Точка цикла) Если счетчик = 0, очистите рабочую ленту и напишите «да», затем остановите
- Если входная лента читает L
- Переместите входную головку влево на количество раз, указанное счетчиком (требуется второй счетчик)
- Если входная лента читает R
- Переместите входную головку вправо на количество раз, указанное счетчиком (требуется второй счетчик)
- Если ячейка, содержащая значение на рабочей ленте, совпадает с текущей ячейкой на входной ленте
- уменьшить счетчик на два
- Переместите один влево или вправо в зависимости от того, находятся ли R или L на рабочем столе соответственно
- скопировать дополнение L или R на рабочую ленту вместо текущего L или R
- продолжить цикл
- Если значения не совпадают, очистите рабочую ленту и напишите «нет», затем остановите
Получается около места для хранения обоих счетчиков, текущего дополнения и значения L или R.
Моя проблема
Первый требует как линейного времени, так и пространства. Второй требует времени и пространства. Я получил проблему из цитаты и предложил эти два подхода, но я не знаю, какой выбрать. Мне просто нужно дать пространственную сложность проблемы. logn
Причина, по которой я запутался
Я бы сказал, что второй вариант - лучший вариант, так как он лучше с точки зрения времени, но этот ответ приходит только от того, что мне повезло и я придумал алгоритм. Кажется, что если я хочу дать пространственную сложность чего-то, это не потребует удачи в выборе правильного алгоритма. Я что-то пропустил? Должен ли я даже придумать решение проблемы, чтобы ответить на сложность пространства?