Я только начал читать о теории вычислений. Если мы сравним, что является более мощным (в принятии строк), оба одинаковы. Но как насчет эффективности? DFA будет быстрым по сравнению с NFA, поскольку у него есть только один исходящий фронт, и не будет никакой двусмысленности. Но в случае NFA мы должны проверить все возможные случаи, и это, безусловно, требует времени. Можно ли сказать, что DFA более эффективен, чем NFA?
Но моя другая часть мозга также думает, что NFA существует только в теории, поэтому мы не можем сравнить его эффективность с DFA.
Соответствие DFA является линейным по размеру входной строки. Сопоставление NFA включает в себя возвратный контроль, поэтому NFA выполняют больше работы. Таким образом, DFAs являются более эффективными.
источник
Просто добавив к ответам выше:
NFA могут быть вычислительно более эффективными, чем DFA, в том смысле, что их можно моделировать на параллельном процессоре.
Кстати, я вижу людей, которые говорят, что НФА не могут существовать в реальности. Позволю себе не согласиться. Компьютер с большим количеством процессоров может выполнять множество задач параллельно и может рассматриваться как недетерминированный компьютер. Можно назначить каждую ветвь вычислений новому процессору и остановить их все, когда один из них примет это.
источник
Если вы используете чисто теоретическое «количество шагов, чтобы принять / отклонить» меру, DFA всегда будет дешевле, чем NFA, который используетε -переходы. Для более сложных автоматов такая мера будет иметь значение.
источник
Как уже отмечали другие, вы должны определить, что означает «эффективность». Чтобы проиллюстрировать это, я приведу разумную модель с другим ответом.
Смотреть только на автоматическую модель (модели), которая игнорирует, в частности, то, как вы реализуете их на реальных машинах, очевидным показателем эффективности является «число переходов, выполненных за (самый короткий) цикл принятия».
Что касается этой меры, обе модели автоматов эквивалентны , так как обе принимают ровно один переход на входной символ (wlog у нас нетε -переходы). Обратите внимание, что размер рассматриваемых автоматов здесь не учитывается.
источник
Технически говоря, NFA является более общей концепцией, чем DFA, поскольку не требуется использовать недетерминизм. Другими словами: каждый DFA - это NFA. С этой точки зрения для каждого языка есть NFA, который по меньшей мере так же эффективен, как и самый эффективный DFA, для любой меры эффективности, которую вы предпочитаете.
Кроме этого, я согласен с Рафаэлем, что это очень сильно зависит от эффективности и реализации.
источник
Как мы знаем об автоматах, то есть машинах, которые могут выполнять любые действия без какой-либо силы человека или без непосредственного участия человека. Например: стиральная машина. Конечные автоматы означают, что мы знаем состояние выполнения задачи на машине, например: 1 нажмите кнопку ON, 2 нажмите кнопку OFF, так что есть только 2 состояния, т.е. они называются конечными автоматами. Теперь перейдем к DFA, т.е. к детерминированным конечным автоматам. формально это означает, что мы можем легко определить состояния, в которых нет двусмысленности, и неофициально для этого требуется только 1 переход, разрешенный на 1 символ. NFA: недетерминированные конечные автоматы. необходимо больше времени для вычисления фактического состояния, и существует неоднозначность, и неофициально говорится, что существует несколько разрешенных переходов на 1 символ. в случае времени для достижения пункта назначения NFA требует больше времени, чем DFA, но NFA может загрузить больше данных, чем DFA. * DFA и NFA имеют одинаковую силу для распознавания строки. спасибо .. дипали каушик
источник