Пример ниже доказывает, что алгоритм A это занимает O(nlog(n)) чтобы решить проблему на слове Ram может понадобиться O(n2log(n)3)на 1-лентной машине Тьюринга (ТМ), которая точно выполняет все вычисления, указанныеA, Я понимаю, что этот вопрос относится к 1-магнитной ленте, и я использую только эту в своем ответе. Это редактирование с учетом замечаний Эмиля Йержабека.
Мы найдем следующий более общий вывод . Доказать, что ТМ может решить вO(T(n)2) проблема решена в O(T(n)) по алгоритму Aна оперативной памяти не достаточно запуститьAна ТМ. Умный алгоритм может понадобиться. То же самое относится, если кто-то хочет доказатьO(nlog(n))накладные расходы. Доказательство существования умного алгоритма, когда это необходимо, кажется далеко не немедленным, если не сказать больше. Это не согласуется с другими ответами, которые в основном предлагают имитировать / выполнять на ТМ все вычисления ОЗУ (алгоритмаA) объявить сложность ТМ, например, O(T(n)2) или O(T(n)nlog(n)),
Проблема: нам дают массив / таблицуtab с n=2k целые числа каждый хранится на log(n)биты. Нам дают второй массивd с log(n) позиции, каждая из которых записывает количество log(n)биты. Для любойt∈[0..log(n)−1]мы определяем Xt=1 если tab[i] MOD d[t]=tab[n/2+i] MOD d[t] ∀i∈[0..n/2−1], В противном случае,Xt=0, Вывод∑log(n)−1t=0Xt, Я считаю, что вход дан в виде ленты сnlog(n)+log(n)log(n) двоичные цифры, чтобы обратиться к комментариям Эмиля Jeřábek.
Алгоритм Aв ОЗУ ОЗУ с размером словаw=log(n) потребности O(nlog(n)+log(n)2) знак равно O(nlog(n))читать двоичные строки входных данных. Но после прочтения данных, он может работать только со словамиlog(n)размер. АлгоритмA рассчитывает любой Xt в O(n) пройдя через все i∈[0..n/2−1]и тестирование состояния. Основной циклAэто дляt=0,1,2,…log(n)−1: рассчитать Xt, Общая сложностьO(nlog(n)) (чтение данных) + O(nlog(n)) (делая расчеты), так A может сделать все это в O(nlog(n)) в оперативной памяти
Алгоритм Aна ТМ с 1 лентой: Я утверждаю, что ТМ с одной лентой нуждается вO(n2log(n)2) время для фиксированного t, С точки зрения ТМ, определяяAt эквивалентно проверке равенства двух двоичных строк длины O(nlog(n)), Например, операция MODtab[i] MOD d[t] может быть эквивалентно удалению бита 0 из tab[i], В таких случаях, определяяAt эквивалентно проверке на равенство на битовых строках с длиной n(log(n)−1)/2, Хорошо известно, что проверка равенства двух строк длиныm требует O(m2)на 1-ленте ТМ, но я не могу найти ссылку прямо сейчас. Тем не менее, я предоставляю доказательство в пс. Если ТМ выполняет основной цикл изA, это должно потратить как минимум O((nlogn)2) для каждого t=0,1,2,…log(n)−1заканчивая в O(n2log(n)3),
пс. Я показываю, что тестирование на равенствоmбиты не могут быть быстрее, чем тестирование palyndrome на строках сm биты (как известно, палиндром занимает по крайней мере O(m2)время). Мы можем модифицировать любой алгоритм TM для проверки на равенство, чтобы решить палиндром. Предположим, что TM тестирования на равенство начинается с двух целых чисел: одного слева от головы, другого справа (это самая простая форма ввода для TM). Каждое движение по левым позициям может быть отражено (отражено) по правым позициям. Мы строим зеркальную ТМ: всякий раз, когда начальная ТМ находится в позиции−x<0 (слева) зеркальная ТМ находится в положении x(справа). Если ТМ решила тестирование на равенство менее чем заO (м2), this modified mirrored TM
would solve palindrome in less than O (м2),
Кроме того, существуют некоторые алгоритмы TM для тестирования на равенство, и все они требуют квадратичного времени, потому что им нужно некоторое зигзагообразное движение, см., Например, Пример 2 машины Тьюринга по адресу courses.cs.washington.edu/courses/cse431/14sp/cribes/ lec3.pdf