Плюсы и минусы NFA по сравнению с DFA?

Преимущества NFA перед DFA: представление использует меньше памяти.

Недостатки NFA по сравнению с NFA: Более медленное получение ответа.

Есть ли другие преимущества или недостатки?


person crowso    schedule 04.02.2011    source источник
comment
Компромисс между памятью и скоростью? Это неслыханно!   -  person Matti Virkkunen    schedule 04.02.2011
comment
Несмотря на то, что я не знаю, что означает nfa или в каком контексте оно используется: вам нужно что-то для сравнения. использует меньше памяти для его представления не является допустимым утверждением, если вы не сравниваете его с чем-то другим.   -  person Felix Kling    schedule 04.02.2011
comment
@Felix Kling NFA = недетерминированный конечный автомат   -  person Foo Bah    schedule 04.02.2011


Ответы (2)


Я думаю, что вы в значительной степени нашли основные компромиссы в голове. NFA могут быть более эффективными с точки зрения использования памяти, поскольку они могут кодировать O(2n) различных конфигураций в O(n) пространстве, в то время как DFA для одного и того же языка может занимать экспоненциальное пространство. Вы также правы в том, что NFA имеют более медленные обновления; большинству алгоритмов моделирования NFA требуется время O (n) для вычисления переходов между состояниями (где n — количество состояний) по сравнению с временем O (1) для DFA.

Между ними есть еще несколько различий. Во-первых, DFA обычно легче кодировать, поскольку для каждой пары состояния и символа существует ровно один переход. Это естественно для многомерного массива для таблицы переходов. Напротив, NFA (или, что еще хуже, -NFA) обычно требует более сложного представления, поскольку для любого состояния может быть большое количество переходов. Однако у NFA есть то преимущество, что многие преобразования сложных структур в автоматы проще с NFA. Например, каноническая конструкция автомата сопоставления из регулярного выражения генерирует -NFA, а не DFA, поскольку преобразование лучше всего выражается путем рекурсивного создания меньших -NFA и последующего их объединения с помощью -перемещений. Можно напрямую преобразовать регулярное выражение в DFA, но сделать это значительно сложнее. Точно так же многие алгоритмы для создания синтаксических анализаторов LR(k) могут быть более интуитивно мотивированы путем изучения того, как автомат распознавания дескрипторов работает с точки зрения NFA, а не с точки зрения DFA (хотя большинство алгоритмов для создания этих синтаксических анализаторов обращаются непосредственно к DFA, а не к NFA). ).

Надеюсь это поможет!

person templatetypedef    schedule 04.02.2011

Представления NFA более компактны, но DFA легче моделировать. Часто происходит экспоненциальное увеличение размера, когда NFA сводится к DFA.

person Foo Bah    schedule 04.02.2011