Пусть будут двумя обычными языками, заданными NFA качестве входных данных.
Предположим, мы хотели бы проверить, является ли . Это можно сделать с помощью квадратичного алгоритма, который вычисляет автомат произведений , но мне было интересно, известно ли что-нибудь более эффективное.
Существует ли алгоритм для определения того, является ли ? Какой самый быстрый известный алгоритм?
Ответы:
Простой ответ : если существует более эффективный алгоритм, который выполняется за время для некоторого δ < 2 , то гипотеза о сильном экспоненциальном времени будет опровергнута.O(nδ) δ<2
Мы докажем более сильную теорему, и тогда последует простой ответ.
Теорема : если мы сможем решить проблему непустоты пересечения для двух DFA за времени, то любая проблема, которая недетерминированно разрешима с использованием только n битов памяти, детерминированно разрешима в p o l y ( n ) ⋅ 2 ( δ н / 2 ) раз.O(nδ) poly(n)⋅2(δn/2)
Обоснование : Предположим, что мы можем решить не пустоту пересечения для двух DFA за времени. Пусть дана недетерминированная машина Тьюринга M с входной лентой только для чтения и двоичной рабочей лентой для чтения / записи. Пусть задана входная строка x длины n. Предположим, что M не имеет доступа к более чем n битам памяти на двоичной рабочей ленте.O(nδ)
Вычисление M на входе x может быть представлено конечным списком конфигураций. Каждая конфигурация состоит из состояния, позиции на входной ленте, позиции на рабочей ленте и до n бит памяти, которые представляют рабочую ленту.
Теперь учтите, что рабочая лента была разделена пополам. Другими словами, у нас есть левая часть ячейки и правая частьпn2 кл. Каждая конфигурация может быть разбита на левую часть и правую часть. Левая часть состоит из состояния, положения на входной ленте, положения на рабочей ленте иnn2 бита из левого раздела. Правая часть состоит из состояния, положения на входной ленте, положения на рабочей ленте иn.n2 бита из правого раздела.n2
Теперь мы создаем DFA чьи состояния - это левые части, и DFA D 2, чьи состояния - это правильные части. Буквенные символы - это инструкции, в которых указано, в какое состояние переходить, как должны двигаться головки ленты и как следует манипулировать активной ячейкой рабочей ленты.D1 D2
Идея состоит в том, что и D 2 читают в списке инструкций, соответствующих вычислению M на входе x, и вместе проверяют, что он действителен и принимает. И D 1, и D 2 всегда будут согласовывать расположение головок магнитных лент, поскольку эта информация включена в их символы ввода. Следовательно, мы можем сделать так, чтобы D 1 проверял, что инструкция подходит, когда положение рабочей ленты находится в левой части, а D 2 проверяет, когда в правой части.D1 D2 D1 D2 D1 D2
Вы можете найти это полезным: https://rjlipton.wordpress.com/2009/08/17/on-the-intersection-of-finite-automata/
Комментарии, исправления, предложения и вопросы приветствуются. :)
источник