Минимизируйте DFA с безразличными переходами

У меня есть DFA (Q, , , q0, F) с некоторые переходы «все равно». Эти переходы моделируют символы, которые, как известно, не появляются во входных данных в некоторых ситуациях. Если выполняется любой такой переход, не имеет значения, принята результирующая строка или нет.

Существует ли алгоритм для вычисления эквивалентного DFA с минимальным количеством состояний? Обычные алгоритмы минимизации DFA не могут быть использованы, поскольку они не знают о переходах «безразлично», и не кажется очевидным способом расширить алгоритмы.


person fuz    schedule 03.07.2019    source источник
comment
Если вас не волнуют переходы безразличия, то почему вы не можете просто удалить их?   -  person Matt Timmermans    schedule 03.07.2019
comment
@MattTimmermans Потому что в DFA есть переход для каждой комбинации состояния и символа. У вас не может быть «отсутствия перехода», и алгоритмы минимизации ожидают, что это так.   -  person fuz    schedule 03.07.2019
comment
Если символ никогда не встречается (в состоянии), вы можете удалить переход для этого {состояния, символа} (или: вы можете заменить все недостижимые состояния одним или несколькими состояниями ошибки)   -  person wildplasser    schedule 03.07.2019
comment
@wildplasser И на что заменить? Напомним, функция перехода завершена и должна содержать запись для каждой комбинации состояния и символа. Если бы я изменил это, вопрос о том, как адаптировать алгоритмы минимизации DFA, остался бы.   -  person fuz    schedule 03.07.2019
comment
Переход может использовать меньшую область, чем декартово произведение {указывает X символов}   -  person wildplasser    schedule 03.07.2019
comment
Алгоритм Бжозовского все еще не работает?   -  person harold    schedule 03.07.2019
comment
@wildplasser Тогда отношение Myhill-Nerode либо больше не является отношением эквивалентности (если мы принимаем «отсутствие перехода» как эквивалентное любому другому переходу), либо оно помечает состояния с отсутствующим переходом как отличные от всех состояний, в которых этот переход присутствует, отрицая весь смысл переходов «все равно». Как это исправить?   -  person fuz    schedule 03.07.2019
comment
@harold На самом деле, если подумать, я не думаю, что алгоритм Бжозовского сработает. Как бы вы смоделировали переходы «все равно» для его использования?   -  person fuz    schedule 03.07.2019
comment
@fuz ну, я подумал, что для безразличного преимущества не добавляйте его разворот в NFA. Это все еще NFA с этим, поэтому он не сразу нарушает предварительное условие. Я не совсем уверен, что это делает с результатом, хотя   -  person harold    schedule 03.07.2019
comment
@harold Это все равно, что превратить все переходы «все равно» в переходы «отклонить». Что касается DFA, который у меня есть, я знаю, что его нельзя будет минимизировать, если я сделаю именно это. Я тоже об этом подумал, когда сказал, что это может быть выполнимо, но, если подумать, я думаю, что это не работает.   -  person fuz    schedule 03.07.2019
comment
(Извините, если этот комментарий наивен, я изучал DFA 40 лет назад) Я не вижу разницы с тем, что вы называете DFA, которому все равно на некоторые переходы и неполный DFA. Обычный способ завершить DFA — добавить состояние приемника, соответствующее отсутствующим переходам. Вы можете минимизировать такой завершенный DFA. Затем вы можете удалить состояние приемника из полученного свернутого DFA. В своем предыдущем комментарии вы упомянули, что это не оптимально для вашего DFA. Я удивлен. Не могли бы вы привести пример DFA, где такой простой метод не работает?   -  person Damien    schedule 05.07.2019
comment
@Damien Это равносильно отклонению всех безразличных строк. Я был бы удивлен, если бы этот среди всех возможных вариантов был бы лучшим. Например: рассмотрим DFA, соответствующий одному слову длины n и не заботящийся обо всех остальных. Подход с состоянием приемника генерирует DFA с n + 2 состояниями, в то время как принятие всех безразличных строк приводит к DFA с одним состоянием, которое просто принимает все.   -  person fuz    schedule 06.07.2019
comment
@Damien Обратите внимание, что простое принятие всех безразличных строк также не работает: предположим, у вас есть DFA, который отклоняет все строки, кроме одного слова из n символов. Если слово совпадает, происходит переход «безразлично». Если мы добавим к автомату приемный приемник и минимизируем его, результат будет иметь n + 1 состояние. Если мы вместо этого отклоняем все слова из этого пофигу, автомат имеет одно состояние, отклоняющее все строки.   -  person fuz    schedule 06.07.2019


Ответы (2)


Я думаю, что эта задача является NP-сложной (подробнее об этом чуть позже). Это то, что я бы попробовал.

  1. (Необязательно) Предварительно обработайте ввод с помощью обычного алгоритма минимизации с принятием/отклонением/безразличием в качестве отдельных результатов. (Поскольку все равно не эквивалентно принятию или отклонению, мы получаем обратно отношение эквивалентности Майхилла-Нероде, допуская вариант обычного алгоритма.)

  2. Создайте граф конфликта следующим образом. Начните со всех ребер между принимающим и отвергающим состояниями. Возьмем замыкание, в котором мы итеративно добавляем ребра q1 — q2 так, что существует символ s, для которого существует ребро (q1 , с) — (q2, с).

  3. Раскрасьте этот график как можно меньшим количеством цветов. (Или приблизительно.) Существует множество алгоритмов раскраски. PartialCol — хорошая отправная точка.

  4. Объедините каждый цветовой класс в один узел. Это потенциально делает новую функцию перехода многозначной, но мы можем выбирать произвольно.

Имея доступ к алфавиту произвольного размера, кажется достаточно простым заставить это сведение к раскраске работать в обратном направлении, доказывая NP-трудность. Для меня открытый вопрос заключается в том, ограничивает ли наличие алфавита фиксированного размера граф конфликтов таким образом, чтобы как-то упростить результирующий экземпляр раскраски. Увы, у меня нет времени исследовать это.

person David Eisenstat    schedule 06.07.2019
comment
Потенциально существует множество состояний DC (или приемника), по одному для каждого случая не важно. Не могли бы вы подробно описать, как обрабатываются эти состояния постоянного тока на шаге 2? Кроме того, было бы неплохо, если бы вы могли проиллюстрировать свой ответ небольшим примером - person Damien; 07.07.2019
comment
Состояния @Damien DC изначально существуют как изолированные вершины, но в конечном итоге они имеют границу друг с другом всякий раз, когда существует строка, которая может различать их. - person David Eisenstat; 08.07.2019
comment
Спасибо за указание на это. Это очень похоже на доказательство NP-полноты. нашел в литературе. - person fuz; 08.07.2019

Я считаю, что небольшая вариация обычного алгоритма Мура работает. Вот формулировка алгоритма.

Let S be the set of states.
Let P be the set of all unordered pairs drawn from S.
Let M be a subset of P of "marked" pairs.
Initially set M to all pairs where one state is accepting and the other isn't. 
Let T(x, c) be the transition function from state x on character c.
Do
  For each pair z = <a, b> in P - M
    For each character c in the alphabet
      If <T(a, c), T(b, c)> is in M
        Add z to M and continue with the next z
Until no new additions to M

Окончательное множество P — M представляет собой попарное описание отношения эквивалентности состояний. Из него вы можете создать минимальный DFA, объединив состояния и переходы оригинала.

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

      If T(a, c) != DC and T(b, c) != DC and <T(a, c), T(b, c)> is in M   

(На самом деле в реализации никаких реальных изменений алгоритма не требуется, если DC является зарезервированным значением состояния типа, которое не является состоянием в исходном FA.)

У меня сейчас нет времени думать о формальном доказательстве, но мне это интуитивно понятно. Мы пропускаем разделение классов эквивалентности состояний на основе переходов, которые, как мы знаем, никогда не произойдут.

Мне все еще нужно доказать себе, является ли множество Р — М попарным описанием отношения эквивалентности. То есть можем ли мы получить <a,b> и <b,c>, но не <a,c>? Если да, то есть ли исправление?

person Gene    schedule 04.07.2019
comment
Это больше не отношение эквивалентности: рассмотрим язык, соответствующий xab, не заботящийся о yab и отвергающий zab. Оба перехода от xa к xab и от za к zab относятся к ya к yab, но не связаны друг с другом. Это то, что я имел в виду, когда сказал, что отношение Майхилла-Нероде больше не является отношением эквивалентности, если вы расширите его до значения «все равно» очевидным образом (т. е. тем способом, который вы выбрали). - person fuz; 04.07.2019
comment
@fuz Ха-ха. Спасибо. Таким образом, исправление, казалось бы, должно найти разделение на максимальные клики, что сложно NP, не так ли? Угу. - person Gene; 13.07.2019
comment
Да. Я нашел доказательство NP-полноты путем сведения к тем временем раскрашиваем графы. - person fuz; 13.07.2019