Честно, я установил бы репликацию для этого, как будто Вы не блокируете таблицы, Вы вытащите непоследовательные данные из дампа.
, Если дамп занимает время, таблицы, которые были уже выведены, возможно, изменились наряду с некоторой таблицей, которая только собирается быть выведенной.
Так или заблокируйте таблицы или используйте репликацию.
Некоторые неофициальные ответы, чтобы дать вам идеи, для подробных доказательств прочтите хорошую книгу по автоматам, например эту или те, которые упомянуты в других ответах. И я почти уверен, что в Интернете есть материалы, в которых вы сможете найти ответы на все свои вопросы.
Процедура состоит в том, чтобы исключить повторяющиеся состояния (или объединить эквивалентные состояния). Вы знаете, что состояние и переходы - это ключи для создания строк. По сути, дублированные состояния не способствуют увеличению или уменьшению размера создаваемого языка. Алгоритм начинается с конечных состояний, которые всегда имеют возможность генерировать lamda (пустую строку), и рекурсивно обновляет таблицу, которая указывает на генерирующую способность состояния, и, наконец, объединяет эти состояния без разницы.
Нормализованный DFA для NFA использует различные наборы состояний NFA в качестве состояний DFA, например, {state0} - (1) -> {state1 , state2}, чтобы удалить недетерминированную часть, нет способа избежать взрывного роста состояний, поскольку DFA должен делать это для представления языка.
Я помню, что лучший вариант - O (NLogN), проделав несколько уловок по повторному использованию информации из какой-то статьи профессора Университета Западного Онтарио, и сомневаюсь, что существуют лучшие. Я считаю, что классический - O (N ^ 2).
Да. Получите минимальный, закодируйте состояние по их строке доступа (строка, которая может достичь состояния из начального состояния, это в значительной степени настоящее «имя» состояния) и проверьте карту перехода. Хотя могут быть способы получше, но на bigO большой разницы не будет.
Поскольку все недетерминированные конечные автоматы имеют соответствующий детерминированный конечный автомат, ответы на вопросы 1 и 2 должны быть одинаковыми.
Если вы хотите узнать больше, получите копию "Введение в теорию" of Computing »Майкла Сипсера, который является действительно отличной книгой для изучения этих вещей. Сипсер прекрасно знает, о чем говорит и , как это передать.
Отметьте «Основы проектирования компилятора», начиная с раздела 2.5. Доступно бесплатно онлайн. http://www.diku.dk/hjemmesider/ansatte/torbenm/Basics/basics_lulu.pdf
Он охватывает преобразование NFA в DFA и минимизацию DFA. NFA могут экспоненциально расширяться при преобразовании в DFA.
"... любой обычный язык (язык который может быть выражен регулярным выражением, NFA или DFA) имеет уникальный минимальный DFA. Следовательно, мы можем определить эквивалентность регулярных выражений (или NFA или DFA) путем преобразования обоих в минимальные DFA и сравнения результатов ».