Peut-on dire que DFA est plus efficace que NFA?


13

Je viens de commencer à lire sur la théorie du calcul. Si nous comparons ce qui est le plus puissant (en acceptant des chaînes), les deux sont identiques. Mais qu'en est-il de l'efficacité? DFA sera rapide par rapport à NFA, car il n'a qu'un seul bord sortant et il n'y aura aucune ambiguïté. Mais en cas de NFA, nous devons vérifier tous les cas possibles et cela prend sûrement du temps. Pouvons-nous donc dire que DFA est plus efficace que NFA?

Mais, mon autre partie du cerveau pense également que NFA n'existe qu'en théorie, donc nous ne pouvons pas comparer son efficacité avec DFA.

Réponses:


16

Il existe deux réponses, selon la façon dont vous définissez efficace.

Compacité de la représentation

Dire plus avec moins : les NFA sont plus efficaces.

La conversion d'un DFA en NFA est simple et n'augmente pas la taille de la représentation.

Cependant, il existe des langues régulières pour lesquelles le plus petit DFA est exponentiellement plus grand que le plus petit NFA. Un exemple typique est pour k fixe.(a|b)b(a|b)kk

Calcul

Courez vite : les DFA sont plus efficaces.

Les ordinateurs que nous utilisons aujourd'hui sont de nature déterministe. Cela les rend mal à faire face au non-déterminisme. Il existe deux façons courantes de traiter de manière déterministe les NFA: revenir en arrière d'un côté, ce qui est assez coûteux, ou garder une trace des états actifs, ce qui signifie que chaque transition prendra jusqu'à fois plus longtemps (où N est la taille de la NFA) .NN


Concernant la compacité, les NFA ne sont pas toujours plus efficaces! Il est vrai qu'il existe des langues pour lesquelles le DFA minimal est exponentiellement plus grand que le NFA le plus compact, mais quelle est la fraction de ces langues dans l'ensemble de toutes les langues?
saadtaame

2
@saadtaame Cela peut sembler étrange, mais au sens strict, les NFA n'ont pas à être non déterministes. Les DFA sont un type spécial de NFA, c'est-à-dire des NFA avec un singleton comme ensemble de départ et la fonction de transition est telle qu'un seul état est actif à un moment donné.
Khaur

2
-1 "augmentant sa taille (potentiellement beaucoup)". Simuler des ensembles d'états NFA en conservant une liste chaînée coûte au maximum dans le nombre d'états NFA. Le DFA équivalent, d'autre part, peut avoir des états O ( 2 N ) . O(N)O(2N)
Wandering Logic

@WanderingLogic Vous avez raison, la conversion n'a pas besoin d'être explicite (vous utilisez toujours l'équivalent DFA, mais pas sous une forme extensive). Cependant, le point principal tient toujours, car cela nécessite fois plus de temps de calcul que l'exécution d'un DFA de la même taille . Je vais corriger le dernier paragraphe pour en tenir compte. O(N)
Khaur

Merci pour cette réponse, car j'ai soutenu dans mes recherches que les NFA sont meilleurs pour l'évaluation et je vois maintenant que le point est plus subtil. Dans l'ensemble, les NFA sont certainement meilleurs pour un langage fixe, car tout algorithme d'évaluation NFA intelligent correspondra à la complexité de l'évaluation DFA dans le cas particulier où le NFA est un DFA, et parce que le NFA peut être plus succinct. Cependant, si le choix est entre produire un NFA hautement non déterministe ou trouver un moyen intelligent d'obtenir un DFA de la même taille à la place, pour une application particulière, le DFA est meilleur.
6005

4

En termes de puissance, ils sont équivalents comme vous l'avez dit et il existe un algorithme (construction de sous-ensemble) pour convertir un NFA en un DFA équivalent. Comme vous pouvez le voir d'après le nom de l'algorithme, il construit des sous-ensembles d'états du NFA. Si votre NFA a états, l'algorithme peut sortir un DFA avec 2 n états mais c'est une limite supérieure. Parfois, le nombre d'états ne change pas du tout ou même diminue. Donc, dans la pratique, il importe moins de savoir lequel utiliser.n2n

La correspondance DFA est linéaire dans la taille de la chaîne d'entrée. La correspondance NFA implique un retour en arrière afin que les NFA fassent plus de travail. Ainsi, les DFA sont plus efficaces.


Mais peut-on dire que DFA est plus efficace?
avi

1
@avi J'ai édité la question! Et en passant, les NFA n'existent pas en théorie seulement: vérifiez ceci: swtch.com/~rsc/regexp/regexp1.html
saadtaame

@avi Le problème ici est que le DFA qui est équivalent au NFA sera (souvent) beaucoup plus grand. Ainsi, même si vous pouvez vérifier le DFA beaucoup plus rapidement, vous devrez généralement vérifier un DFA plus grand.
Peter

@Peter, que le DFA est plus important n'a pas d'importance: cela signifie simplement que le tableau donnant la fonction de transition est plus grand.
vonbrand

1
@Khaur, c'est vrai. Mais si vous rencontrez ce genre de problème, vous avez un énorme DFA.
vonbrand

2

Ajout aux réponses ci-dessus:

Les NFA peuvent être plus efficaces en termes de calcul que les DFA, dans le sens où ils peuvent être simulés sur un processeur parallèle.

BTW: Je vois des gens dire que les NFA ne peuvent pas exister dans la réalité. Je ne suis pas d'accord. Un ordinateur avec un grand nombre de processeurs peut exécuter de nombreuses tâches en parallèle et peut être considéré comme une machine non déterministe. On pourrait assigner chaque branche de calcul à un nouveau processeur et les arrêter toutes chaque fois que l'un d'eux accepte.


1
Ni les DFA ni les NFA n'existent en réalité, les deux ne sont que des relations mathématiques, et les deux peuvent être simulés par des algorithmes.
jmite

1

ϵ


ϵ

1
ϵ

mais DFA n'est-il pas exempt de transitions ϵ?
avi

@avi, oui. N'hésitez pas à modifier la réponse si elle n'est pas claire.
vonbrand

non, je vous le demande. Je n'en suis pas sûr non plus
avi

1

Comme d'autres l'ont fait remarquer, vous devez définir ce que signifie «efficacité». Pour illustrer cela, je donne un modèle raisonnable avec une réponse différente.

En ne regardant que le (s) modèle (s) d'automate, c'est-à-dire en ignorant notamment comment vous les implémenteriez sur des machines réelles, la mesure d'efficacité évidente est "le nombre de transitions effectuées sur un (plus court) cycle d'acceptation".

En ce qui concerne cette mesure, les deux modèles d'automates sont équivalents , car les deux prennent exactement une transition par symbole d'entrée (wlog nous n'avons pasε-transitions). Notez que la taille des automates considérés ne prend pas en compte ici.


1

Techniquement parlant, un NFA est un concept plus général qu'un DFA, car il n'est pas nécessaire d'utiliser le non-déterminisme. En d'autres termes: chaque DFA est un NFA. De ce point de vue, il existe pour chaque langue un NFA qui est au moins aussi efficace que le DFA le plus efficace, quelle que soit la mesure d'efficacité que vous préférez.

A part cela, je suis d'accord avec Raphael que cela dépend beaucoup de ce que vous voulez dire avec efficacité et de la mise en œuvre.


-4

Comme nous le savons sur les automates, c'est-à-dire la machine qui peut effectuer n'importe quelle action sans aucune puissance humaine ou sans participation directe de l'homme. par exemple: machine à laver. Automates finis signifie que nous connaissons l'état d'exécution d'une tâche par machine, comme 1 appuyez sur ON 2 appuyez sur OFF, il n'y a donc que 2 états, c'est-à-dire les automates finis. Venons-en maintenant à DFA, c'est-à-dire aux automates finis déterministes. signifie formellement que nous pouvons facilement déterminer les états, il n'y a pas d'ambiguïté et informellement, il n'a besoin que d'une transition autorisée sur 1 symbole. NFA: automates finis non déterministes. il faut plus de temps pour calculer l'état réel et il y a une ambiguïté et d indique officieusement qu'il y a plusieurs transitions autorisées sur 1 symbole. dans le cas du temps nécessaire pour atteindre la destination, NFA prend plus de temps que DFA, mais NFA peut charger plus de données que DFA. * DFA et NFA ont le même pouvoir de reconnaître la chaîne. merci .. Deepali kaushik


1
Les automates finis n'ont rien à voir avec les machines à laver.
David Richerby

2
@DavidRicherby. Peut-être que l'expression "rien du tout" est un peu forte. Après tout, nous pourrions dire qu'une machine à laver a des états prêts , laver , rincer et essorer avec des transitions appropriées entre les états. Une meilleure métaphore, cependant, serait un distributeur automatique de boissons gazeuses à pièces.
Rick Decker

1
@RickDecker D'accord, mais passer du temps à discuter de la minuscule pertinence serait un exemple de ce que Wikipedia appelle " un poids indu ". Et, dans tous les cas, la partie de la réponse dont je parle est de discuter des automates comme des machines autonomes, pas des appareils de calcul.
David Richerby

1
Je ne pense pas que cette réponse ajoute quelque chose de valable à la question. En particulier, vous n'êtes pas certain de votre mesure de l'efficacité et semble mélanger plusieurs préoccupations.
Raphael

Les autres réponses épuisent presque tout ce qui est à dire et, malheureusement, votre réponse est légèrement déroutante.
Evil
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.