Характеристики производительности неминимального DFA

О производительности алгоритмов минимизации DFA написано много. Это расстраивает мое гугловское фу, потому что это не то, что я ищу.

Можем ли мы вообще что-нибудь сказать о характеристиках производительности неминимального ЦКА? Моя интуиция подсказывает, что время выполнения неминимального DFA по-прежнему будет O(n) по отношению к длине входных данных. Кажется, что минимизация повлияет только на количество состояний и, следовательно, на требования к памяти. Это правильно?

Можем ли мы уточнить обобщения, если знаем что-то о построении NFA, из которого был получен DFA? Например, предположим, что NFA был полностью построен путем применения операций конкатенации, объединения и звездочки Клини к примитивным автоматам, которые соответствуют либо одному входному символу, либо эпсилону. Не имея возможности удалить переход или создать произвольный переход, я не думаю, что возможны какие-либо мертвые состояния. Какие обобщения мы можем сделать о DFA, построенных из этих NFA? Меня интересуют как теоретические, так и эмпирические ответы.


person Kevin Krumwiede    schedule 13.01.2015    source источник
comment
Этот вопрос может рассматриваться как не относящийся к теме и может быть более подходящим для cs.stackexchange.com   -  person Codor    schedule 13.01.2015


Ответы (2)


Что касается вашего первого вопроса о времени выполнения неоптимального DFA. Чисто теоретически ваша интуиция о том, что он все еще должен работать за O (n), верна. Однако представьте (в качестве примера) следующий псевдокод для оператора Kleene-Star:

// given that the kleene-star operator starts at i=something
while string[i] == 'r':
    accepting = true;
    i++;
while string[i] == 'r':
    accepting = true;
    i++;
// here the testing of the input string can continue for i+1

Как видите, первые два цикла while идентичны и могут рассматриваться как избыточное состояние. Однако «разделение» циклов while снизит (среди прочего) точность прогнозирования ветвлений и, следовательно, общее время выполнения (см. блестящее объяснение прогнозирования ветвлений Mysticial для получения более подробной информации здесь.

Можно привести множество других подобных «практических» аргументов о том, почему неоптимальный DFA будет медленнее; среди них, как вы упомянули, более высокое использование памяти (и во многих случаях больше памяти означает медленнее, поскольку память - для сравнения - более медленная часть компьютера); больше «если», поскольку каждое дополнительное состояние требует проверки ввода для его преемников; возможно, больше циклов (как в примере), что сделает алгоритм медленнее не только на основе предсказания ветвлений, но и просто потому, что некоторые языки программирования просто очень медленны в циклах.

Что касается вашего второго вопроса - здесь я не уверен, что вы имеете в виду. В конце концов, если вы сделаете преобразование правильно, вы должны получить довольно оптимальный DFA.

РЕДАКТИРОВАТЬ: В ходе обсуждения возникла идея, что может быть несколько неминимальных DFA, построенных из одного NFA, которые будут иметь разную эффективность (в любой выбранной мере), а не в реализации, а в структуре DFA. Это невозможно, так как существует только один оптимальный DFA. Вот набросок доказательства этого:

  1. Предполагая, что наша процедура создания и минимизации DFA оптимальна.
  2. при применении процедуры мы начнем сначала с построения DFA. На этом шаге мы можем создать бесконечно много эквивалентных состояний. Все эти состояния каким-то образом связаны с графом NFA.
  3. На следующем шаге мы исключаем все недостижимые состояния. Это безразлично к производительности, поскольку недостижимое состояние будет соответствовать «мертвому коду» — никогда не выполняться.
  4. На четвертом шаге мы минимизируем DFA, группируя эквивалентные состояния. Вот тут-то и становится интересно — идея в том, что мы можем делать это разными способами, что приводит к разным DFA с разной производительностью. Однако единственный «выбор», который у нас есть, — это назначить состояние другой группе. Итак, ради аргументов, мы предполагаем, что можем это сделать. Но по идее алгоритма минимизации мы можем сгруппировать только эквивалентные состояния. Таким образом, если у нас есть разные варианты группировки определенного состояния, в силу транзитивности эквивалентности не только состояние будет эквивалентно обеим группам, но и группы будут эквивалентны. Таким образом, если бы мы могли группировать по-другому, алгоритм не был бы оптимальным, поскольку он сгруппировал бы все состояния в группах в первую очередь в одну группу. Следовательно, предположение о том, что могут быть разные минимизации, должно быть неверным.
person cleros    schedule 13.01.2015
comment
Последнее предложение вашего ответа в основном то, что я имею в виду. Я ищу, чтобы сузить значения правильно и довольно оптимально. - person Kevin Krumwiede; 13.01.2015
comment
Извините, это было небрежно с моей стороны. Нет довольно оптимального - есть просто оптимальное. А для оптимальности DFA - на это есть обширный ответ в Википедии (поищите детерминированный конечный автомат и минимизацию DFA или, если этого недостаточно, в многочисленных книгах (например, одна Розена называется Intro to Discrete Math как более фундаментальная, или Введение в теорию автоматов Хопкрофта для более тщательного и требовательного изучения) - person cleros; 14.01.2015
comment
Ну, я уверен, что есть степени оптимальности. Мне интересно, можно ли охарактеризовать (даже вероятностно) неоптимальность DFA, построенного из NFA, построенного определенным образом. Это может подсказать наилучшую стратегию минимизации или, может быть, ее не стоит сводить к минимуму. - person Kevin Krumwiede; 14.01.2015
comment
Ну, в зависимости от того, как вы определяете оптимальное, вы, конечно, можете сказать, что каждое приводимое состояние дает вам меру оптимальности. Чем меньше приводимых состояний, тем оптимальнее DFA. Другие степени оптимальности могут быть измерены, например. язык реализации - например. как ведет себя какая-то конкретная реализация (с точки зрения времени и памяти) на языке xyz ... однако я понятия не имею, существуют ли подобные измерения. Дайте мне знать, если вы сделали анализ, это может быть интересно! - person cleros; 14.01.2015

Рассуждение о том, что «время выполнения» для принятия ввода будет таким же, поскольку обычно потребляется один символ ввода; Я никогда не слышал о понятии «время выполнения» (в смысле асимптотической сложности времени выполнения) в контексте DFA. Минимизация направлена ​​на минимизацию количества состояний (т. е. на оптимизацию «размера реализации») DFA.

person Codor    schedule 13.01.2015