Большой разрыв между оперативной памятью и сложностью машины Тьюринга


9

Если мы рассмотрим только проблемы в P, есть ли какие-то большие промежутки между самым быстрым из известных алгоритмов слово-RAM и самым быстрым из известных алгоритмов машины Тьюринга для конкретных задач? Мне особенно интересно, есть ли большие пробелы для естественных проблем, представляющих общий интерес.


6
машина ОЗУ может быть смоделирована машиной Тьюринга с накладными расходами O(nlogn)во время выполнения. Так что не будет действительно больших разрывов.
Шаул

@Shaull Существует ли разрыв такого размера для любой естественной / популярной проблемы?
Лембик

3
Палиндром занимает Ω(n2) время на одной ленте ТМ (и есть O(n)в оперативной памяти). eecs.yorku.ca/course_archive/2008-09/W/6115/palindrome.pdf
SamM

6
Насколько я знаю, комментарий Шолля верен только для недетерминированных машин и в настройках двухмоточной ТМ. Цитата, Шолл?
Райан Уильямс

1
@ qbt937 - Ух ты, какой взрыв из прошлого :) Я считаю, что я не давал цитату, потому что у меня ее не было (и у меня ее сейчас нет), и вполне может быть, что Райан Уильямс прав.
Шал

Ответы:


6

Известно, что любая проблема, которую вы можете вычислить на компьютере с оперативной памятью вовремя T(n), вы можете сделать это в машине Тьюринга в самое большее время T(n)2, Вы должны заметить, что общий объем используемой памяти не может быть больше, чемT(n), поскольку это будет означать, что вы сделали больше операций записи, чем T(n)Таким образом, каждый раз, когда вы извлекаете что-то из оперативной памяти, машина Тьюринга будет работать в худшем случае. T(n)время, чтобы найти нужный элемент последовательно с ленты. Помимо доступа к памяти, остальные операции должны занимать примерно столько же времени. И таким образом вы получаете ограничение.


2
ОЗУ могут вычислять длину входного сигнала (и, следовательно, также сторону этой длины) в логарифмическом времени, но базовым машинам Тьюринга требуется линейное время для вычисления этого паритета.

1

Пример ниже доказывает, что алгоритм 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/21], В противном случае,Xt=0, Выводt=0log(n)1Xt, Я считаю, что вход дан в виде ленты с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/21]и тестирование состояния. Основной цикл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(справа). Если ТМ решила тестирование на равенство менее чем заО(м2), this modified mirrored TM would solve palindrome in less than О(м2),

Кроме того, существуют некоторые алгоритмы TM для тестирования на равенство, и все они требуют квадратичного времени, потому что им нужно некоторое зигзагообразное движение, см., Например, Пример 2 машины Тьюринга по адресу courses.cs.washington.edu/courses/cse431/14sp/cribes/ lec3.pdf


Нижняя граница для палиндромов действует только для неестественной модели с одной лентой. Нетрудно проверить равенство двух строк на ТМ за линейное время. То же самое верно для равенства двух последовательностей более длинных записей. Кроме того, для того, чтобы вопрос вообще имел какой-либо смысл, входные данные для обеих моделей машин должны быть идентичными, то есть записаны в виде строк над конечным алфавитом. Таким образом, вашей оперативной памяти потребуется время O (log n) для чтения каждой записи и преобразования ее в слово, что делает эту операцию бессмысленной.
Эмиль Йержабек

@ Эмиль Йержабек, я отредактирую свой ответ, чтобы указать, что я думаю только о ТМ с 1 лентой. Когда вы говорите, что ТМ может проверять равенство в линейном времени, я полагаю, вы думаете о ТМ с двумя лентами. Однако я понял, что весь вопрос касается ТМ с одной лентой. Что касается формы ввода, я должен признаться, что вы, возможно, правы, по крайней мере, для некоторых word-RAM. Но, насколько мне известно, массив C ++ int хранит целые числа один за другим без разделителя, как если бы они хранили вместе последовательность битов. 10 дюймов на 16 бит занимают ровно 160 бит, не так ли? Даже если это не так, можно построить машину, работающую таким образом.
Даниэль Порумбель

3
Стандартная модель машины Тьюринга в теории сложности - многоленточная. Я не могу понять, как C ++ имеет какое-либо значение здесь, мы обсуждаем не C ++, а модель RAM. В этой модели отдельные ячейки памяти могут содержать числа длиныО(журналN), но мы все еще можем работать только на один (или О(1)) расположение памяти за раз. В частности, мы можем получить доступ только к одному входу за раз: нет операции, которая позволила бы вам выполнить «чтение».журналNвводите местоположения и объединяйте их в одно слово »за постоянное время.
Эмиль Йержабек

Существует две возможности: (1) входное местоположение [0] содержит первый бит первого числа, местоположение [1] содержит второй бит первого числа и т. Д. Тогда это нужноО(NжурналN)время для чтения в оперативной памяти, как для машины Тьюринга. Таким образом, даже с одноленточными ТМ вы получаете только квадратичное ускорение. (2) Местоположение ввода [0] содержит первое число, местоположение [1] второе число и т. Д. Тогда проблема для TM не имеет смысла, так как она не может обработать ввод этой формы. Таким образом, вы вообще не получаете никакого ускорения, а проблема, которая выражается только в одной из моделей машин.
Эмиль Йержабек

@Emil Jeřábek, Following your remarks, I edited the question to propose a problem and a RAM algorithm that explicitly takes O(nlog(n)) to read the data (from a tape). I removed some of my remarks that are no longer relevant. I hope this solves the problem you pointed out.
Daniel Porumbel
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.