В связи с этим вопросом мне пришло в голову задаться вопросом: какова временная сложность одноленточной машины Тьюринга с одной головкой для вычисления длины ее входных данных? Чтобы быть точным, скажем, что алфавит ленты равен , входные данные представляют собой строку в ( 0 + 1 ) ∗, окруженную пробелами, машина запускается с крайнего левого входного символа и должна заканчиваться на крайний левый символ строки в ( 0 + 1 ) ∗(снова окруженный пробелами), который дает двоичное представление длины ввода. Это также можно рассматривать как проблему преобразования числа из унарного в двоичное.
Это легко решить на двухслойной машине или машине с двумя головками за линейное время (просто отсканируйте вход одной головкой, используя другую головку, чтобы многократно увеличить счетчик; увеличение - это операция с постоянным амортизированным временем). Но решения с одной головкой, которые я могу придумать, это только (например, многократно увеличивать счетчик, а затем сдвигать его на одну позицию вдоль ленты). Есть ли соответствующая нижняя граница?
Я пробовал некоторые поиски, но фразы типа «одна голова» и «длина ввода» настолько распространены, что затрудняют поиск в литературе известных результатов по этой проблеме.
источник
Ответы:
Он не может быть вычислен за время .o ( n lgн )
Пусть будет машиной, которая задает входную строку x с размером x, записанным в двоичном виде на ленте.M Икс Икс
Мы можем добавить простой (с нулевым пространственным линейным временем) DFA к чтобы проверить, является ли размер входа степенью двойки: просто убедитесь, что первый бит равен 1, а остальные равны нулю.M
Предположим, что проходит время o ( n lg n ) . Тогда мы можем со временем решить o ( n lg n ), что размер входных данных является степенью двойки. Другими словами, следующий язык разрешим в D T i m e ( n lg n ) . L = { 0 я | ∃ K я = 2 K } Из D Т я м е (M o ( n lgн ) o ( n lgн ) D T i m e (nlgн )
источник