Для каждой вычислимой функции


19

Для каждой вычислимой функции существует ли задача, которая может быть решена в лучшем случае за время или существует вычислимая функция такая, что любая задача, которая может быть решена в может также быть решено в время?fΘ(f(n))fO(f(n))o(f(n))

Этот вопрос возник в моей голове вчера. Я думал об этом немного сейчас, но не могу понять это. Я действительно не знаю, как я Google для этого, поэтому я спрашиваю здесь. Вот что я придумала:

Сначала я подумал, что ответ «да»: для каждой вычислимой функции f проблема «Вывести точек» (или создать строку с точками или чем-либо еще), очевидно, не может быть решена в время. Таким образом, нам нужно только показать, что это может быть решено за время. Нет проблем, просто возьмите следующий псевдокод:f(n)f(n)o(f(n))O(f(n))

x = f(n)
for i from 1 to x:
    output(".")

Понятно, что этот алгоритм решает поставленную задачу. И время его выполнения явно в , поэтому проблема решена. Это было легко, правда? Кроме нет, это не потому, что вы должны учитывать стоимость первой строки. Время выполнения вышеупомянутого алгоритма только в если время, необходимое для вычисления находится в . Очевидно, что это не так для всех функций 1 .Θ(f(n))Θ(f(n))f(n)O(f(n))

Так что такой подход никуда меня не привел. Я был бы благодарен всем, кто указал мне правильное направление, чтобы понять это должным образом.


1 Рассмотрим, например, функцию . Ясно, что , но нет алгоритма, который вычисляет за времени. O ( p ( n ) ) = O ( 1 ) p O ( 1 )p(n)={1if n is prime2otherwiseO(p(n))=O(1)pO(1)


1
Я не думаю, что ваши два утверждения в ваших первых абзацах обязательно противоположны друг другу: что, если у вас есть такое , что существует некоторая проблема, которая может быть решена в O ( f ( n ) ) , а не в o ( f ( n) ) ) ни во время Θ ( f ( n ) ) ? fO(f(n))o(f(n))Θ(f(n))
Алекс тен Бринк

@ Алекс Это хорошая мысль, я не учел это.
sepp2k

Ответы:


13

По теореме Гэпа (используя формулировку отсюда , ищите «пробел»), для любой вычислимой неограниченной функции существует некоторая возрастающая (на самом деле, сколь угодно большая) вычислимая функция f : NN такая, что D T I M E ( f ( n ) ) = D T I M E ( g ( f ( n ) ) .g:NNf:NNDTIME(f(n))=DTIME(g(f(n))

Это отвечает на ваш вопрос тем, что существует такое (на самом деле бесконечное множество): для любой вычислимой функции g такой, что g = o ( n ) , существует некоторая возрастающая функция f, такая что все задачи, разрешимые в O ( f ( n) ) ) время также разрешимо за O ( g ( f ( n ) ) = o ( f ( n ) ) время. Обратите внимание, что ffgg=o(n)fO(f(n))O(g(f(n))=o(f(n))f не обязательно конструируемый во времени - для случая, который конструируем во времени, смотрите ответ @RanG.

В формулировке Википедии (которая требует, чтобы ), тогда g f становится вашим примером, а f должно быть ω ( n ) (так что вы идете наоборот - 'проблемы, решаемые в O ( g ( f ( n ) ) также разрешимы в O ( g ( n ) ) '- интересная часть).g(x)xgffω(n)O(g(f(n))O(g(n))

В статье Википедии не отмечается, что увеличивается и на самом деле может быть сколь угодно большим (например, f ( n ) g ( n ) ). В статье , что и доказывает теорему разрыва делает упоминание и доказать это (см здесь , например).ff(n)g(n)


может быть o ( n ) ? Разве не требуется, чтобы g ( x ) x ? Ваше утверждение все еще верно, но доказательство идет другим путем, верно? go(n)g(x)x
Ран Г.

@RanG. Обновленный, чтобы дать доказательство для обеих формулировок (я использовал формулировку в статье) :)
Алекс тен Бринк

«для любой вычислимой функции g такой, что g = o (n), существует некоторая функция f, такая, что все задачи, решаемые за время O (f (n)), также разрешимы за O (g (f (n)) = o ( f (n)) time "Что если все f, которые существуют для этого g, находятся в O (1)? Тогда O (g (f (n)) все еще равно O (1) и, следовательно, не o (1).
sepp2k

@ sepp2k: хороший улов, это действительно проблема, как сформулировано. Я обновил свой ответ.
Алекс тен Бринк

12

Для любой вычислимой функции существует ли задача, которая может быть решена в лучшем случае за время Θ ( f ( n ) ), или существует вычислимая функция f такая, что любая задача, которая может быть решена в O ( f ( n ) ), также может быть решенным в o ( f ( n ) ) время?fΘ(f(n))fO(f(n))o(f(n))

Если является конструируемой по времени функцией , то теорема об иерархии времени говорит, что существуют проблемы, которые требуют времени O ( f ( n ) ) и не могут быть решены за время o ( f ( n )fO(f(n)). В частности, DTIME(o(f(n)o(f(n)log(f(n)))

DTIME(o(f(n)log(f(n))))DTIME(f(n))

Это учитывает только решение проблем и не учитывает время, необходимое для генерации выходных данных.


Прав ли я, если предположить, что если мы рассмотрим не конструируемые во времени функции, то ответ на мой вопрос будет «нет»? Или, соответственно: если функция не может быть построена по времени и, следовательно, нет машины Тьюринга, которая останавливается после шагов f ( n ) , означает ли это, что также нет машины Тьюринга, которая останавливается после шагов Θ ( f ( n ) ) ? Потому что из этого тривиально следует, что ответ на мой вопрос - нет. ff(n)Θ(f(n))
sepp2k

По-разному. Предположим, что не конструируется во времени, но может быть ограничено некоторой другой функцией g, которая конструируется во времени. f = Θ ( g ), и все еще существуют проблемы, которые можно решить за время O ( f ), но не намного меньше этого. fgf=Θ(g)O(f)
Ран Г.

и используя несколько ленточных TM, вы можете улучшить результат от доo(f(n)). o(f(n)lgf(n))o(f(n))
Каве

3

Я попытаюсь представить что-то вроде основы в надежде, что она даст более глубокое понимание.

Когда вы добираетесь до чего-то такого фундаментального, везде возникают неожиданные ловушки. Например: что значит «решить» проблему? Часто в компьютерных науках мы рассматриваем только вариант «принятия решения», в котором нам дают ввод, и нам нужно только вывести True или False. Вы концентрируетесь на проблеме «функции».

Если вы рассматриваете нотацию O (f (n)) как попытку отловить, сколько «работы» необходимо для решения проблемы, использование решения вместо функции (где требуется вывод) кажется более подходящим, поскольку вы четко отделяете вычисления от форматирования вывода ,

Я не думаю, что это ответит на ваш вопрос, но вас это может заинтересовать: http://en.wikipedia.org/wiki/Time_hierarchy_theorem

Также будьте осторожны с теоремой ускорения .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.