Из теоремы о пространственной иерархии известно, что если конструируемо в пространстве, то DSPACE ( ) не равно DSPACE ( .2 f ( n ) f ( n ) )
Здесь под DSPACE ( я подразумеваю класс всех задач, которые могут быть решены в пространстве машиной Тьюринга с некоторым фиксированным алфавитом. Это позволяет с такой точностью рассматривать теорему о пространственной иерархии.
Стандартный аргумент дает мультипликативную константу : нам нужно пространство для построения вычисления некоторой машины Тьюринга с помощью универсальной. Также нам нужно чтобы решить проблему с остановкой.
Вопрос: Является ли DSPACE ( ) , равная DSPACE ( )? 3
cc.complexity-theory
complexity-classes
Алексей Милованов
источник
источник
Ответы:
Можно доказать, что DSPACE( ф( 32н ) ) ≠ DSPACE( ф( н ) ) еслие растет хотя бы линейно, используя простой вариант стандартного аргумента заполнения. Для языкаL пустьL'= { х 0| х | / 2∣ x ∈ L } .
Запрос.L ∈ DSPACE (f(n)) тогда и только тогда, когда L′∈ DSPACE (f(23n)) еслиf(n)≥32n .
(Мой первый ответ содержал несколько неправильных утверждений, спасибо Эмилю за то, что он это заметил.)
Сначала я покажу, как использовать утверждение, чтобы доказать иерархию. Посколькуf растет хотя бы линейно, имеем DSPACE (2f(n))⊂ DSPACE (f(2n)) . Возьмем язык L∈ DSPACE (f(2n))∖ DSPACE (f(n)) . Используя утверждение, L′∈ DSPACE (f(43n))= DSPACE(f(n)) , где последнее равенство является косвенным предположением. Но тогдаL∈ DSPACE(f(32n))= DSPACE(f(n)) , где последнее равенство снова по косвенному предположению, что дает противоречие.
Доказательство претензии. ЕслиL′∈ DSPACE (f(23n)) , то для доказательстваL∈ DSPACE(f(n)) нам просто нужно написать|x|/2 0 до конца вводаx и моделируют машину, которая принялаL′ . Посколькуf(n)≥32n , это не увеличит пространство, которое мы используем. (На самом деле, зная, сколько писать 0, совсем не ясно, еслиf мало и мы не можем увеличить размер алфавита - вместо этого мы можем использовать другую ленту и записать на нее все, что будет после концаx .)
Другое направление - это просто, заменяя 0 на *, если нам разрешено писать *. (См. Проблемы с этим в моем комментарии к вопросу.) Если нам не разрешено писать звезды, мы слегка модифицируем определениеL′ как L′={x10|x|/2∣x∈L} . Теперь вместо записи звезд мы сохраняем исходный ввод x10|x|/2 и работать с этим. Но когда мы достигаем 1, мы идем вправо, пока не нажмем еще 1, чтобы проверить, был ли это конец слова 1 или нет. Если мы нашли еще одну 1, мы просто вернемся к нашей 1. Если мы не нашли, мы все еще вернемся, но мы будем знать, что ее следует рассматривать как звезду - если мы будем писать на ней, то мы также пишем 10 после него, чтобы иметь новый маркер конца текущего слова. (На самом деле, в этой части также есть небольшая загвоздка, если f мало - как мы можем проверить, имеет ли вход форму x10|x|/2 ? Без уничтожения ввода я могу решить эту проблему, используя несколько головок для малого f .)
источник