Können wir sagen, dass DFA effizienter ist als NFA?

13

Ich habe gerade angefangen, über die Theorie der Berechnung zu lesen. Wenn wir vergleichen, was (beim Akzeptieren von Zeichenfolgen) mächtiger ist, sind beide gleich. Aber wie steht es mit der Effizienz? DFA ist im Vergleich zu NFA schnell, da es nur eine ausgehende Flanke hat und keine Mehrdeutigkeit besteht. Aber im Falle von NFA müssen wir alle möglichen Fälle überprüfen und das braucht sicherlich Zeit. Können wir also sagen, dass DFA effizienter ist als NFA?

Aber mein anderer Teil des Gehirns denkt auch, dass NFA nur in der Theorie existiert, deshalb können wir seine Effizienz nicht mit DFA vergleichen.

avi
quelle

Antworten:

15

Es gibt zwei Antworten, je nachdem, wie Sie effizient definieren.

Kompaktheit der Darstellung

Mit weniger mehr sagen: NFAs sind effizienter.

Das Konvertieren eines DFA in einen NFA ist unkompliziert und vergrößert die Darstellung nicht.

Es gibt jedoch reguläre Sprachen, für die der kleinste DFA exponentiell größer ist als der kleinste NFA. Ein typisches Beispiel ist für k fest.(a|b)b(a|b)kk

Berechnung

Schnelle Ausführung: DFAs sind effizienter.

Die Computer, die wir heute benutzen, sind deterministischer Natur. Das macht sie schlecht im Umgang mit Nichtdeterminismus. Es gibt zwei übliche Methoden, um deterministisch mit NFAs umzugehen: das Zurückverfolgen auf einer Seite, was ziemlich kostspielig ist, oder das Verfolgen der aktiven Zustände, was bedeutet, dass jeder Übergang bis zu mal länger dauert (wobei N die Größe der NFA ist). .NN

Khaur
quelle
In Bezug auf die Kompaktheit sind NFAs nicht immer effizienter! Es gibt zwar Sprachen, für die der minimale DFA exponentiell größer als der kompakteste NFA ist, aber wie hoch ist der Anteil solcher Sprachen in der Menge aller Sprachen?
Saadtaame
2
@saadtaame Es mag seltsam erscheinen, aber im strengsten Sinne müssen NFAs nicht nicht deterministisch sein. DFAs sind eine spezielle Art von NFAs, dh NFAs mit einem Singleton als Startmenge und einer Übergangsfunktion, bei der jeweils nur ein Zustand aktiv ist.
Khaur
2
-1 "Erhöhen seiner Größe (möglicherweise viel)". Das Simulieren von Sätzen von NFA-Zuständen durch Beibehalten einer verknüpften Liste kostet höchstens in der Anzahl von NFA-Zuständen. Der äquivalente DFA könnte andererseits O ( 2 N ) -Zustände haben. O(N)O(2N)
Wandering Logic
@WanderingLogic Sie haben Recht, die Konvertierung muss nicht explizit sein (Sie verwenden immer noch den entsprechenden DFA, nur nicht in umfangreicher Form). Der Hauptpunkt bleibt jedoch bestehen, da dies -mal mehr Rechenzeit erfordert als das Ausführen eines DFA derselben Größe . Ich werde den letzten Absatz korrigieren, um das zu berücksichtigen. O(N)
Khaur
Vielen Dank für diese Antwort, da ich in meinen Recherchen argumentiert habe, dass NFAs besser für die Bewertung sind und ich jetzt sehe, dass der Punkt subtiler ist. Insgesamt sind NFAs definitiv besser für eine feste Sprache, da jeder intelligente NFA-Bewertungsalgorithmus der Komplexität der DFA-Bewertung entspricht, wenn es sich bei der NFA um eine DFA handelt, und weil die NFA möglicherweise prägnanter ist. Wenn Sie jedoch die Wahl zwischen der Erzeugung einer hochgradig nicht deterministischen NFA oder der Suche nach einer cleveren Methode zur Erzielung einer DFA gleicher Größe haben , ist DFA für eine bestimmte Anwendung besser.
6005
4

In Bezug auf die Leistung sind sie äquivalent, wie Sie sagten, und es gibt einen Algorithmus (Teilmengenkonstruktion) zum Umwandeln eines NFA in einen äquivalenten DFA. Wie Sie dem Namen des Algorithmus entnehmen können, werden Teilmengen von Zuständen des NFA erstellt. Wenn Ihr NFA Zustände hat, gibt der Algorithmus möglicherweise einen DFA mit 2 n Zuständen aus, dies ist jedoch eine Obergrenze. Manchmal ändert sich die Anzahl der Zustände überhaupt nicht oder verringert sich sogar. In der Praxis ist es also weniger wichtig, welchen man verwendet.n2n

Die DFA-Übereinstimmung ist in der Größe der Eingabezeichenfolge linear. Der NFA-Abgleich umfasst das Zurückverfolgen, damit NFAs mehr Arbeit leisten. Somit sind DFAs effizienter.

Saadtaame
quelle
Aber können wir sagen, dass DFA effizienter ist?
Avi
1
@avi Ich habe die Frage bearbeitet! Übrigens gibt es
NFAs
@avi Das Problem hierbei ist, dass der DFA, der dem NFA entspricht, (oft) viel größer ist. Obwohl Sie den DFA viel schneller überprüfen können, müssen Sie normalerweise einen größeren DFA überprüfen.
Peter
@ Peter, dass der DFA größer ist, spielt keine Rolle: Es bedeutet nur, dass das Array mit der Übergangsfunktion größer ist.
Vonbrand
1
@ Khaur, stimmt. Aber wenn Sie in diese Art von Problem geraten , haben Sie einen gewaltigen DFA.
Vonbrand
2

Fügen Sie einfach die obigen Antworten hinzu:

NFAs können in dem Sinne recheneffizienter als DFAs sein, dass sie auf einem Parallelprozessor simuliert werden können.

Übrigens: Ich sehe Leute sagen, dass NFAs in der Realität nicht existieren können. Ich bin anderer Ansicht. Ein Computer mit einer großen Anzahl von Prozessoren kann viele Aufgaben parallel ausführen und kann als nicht deterministische Maschine betrachtet werden. Man könnte jeden Berechnungszweig einem neuen Prozessor zuweisen und sie alle anhalten, wann immer einer von ihnen akzeptiert.

Ohne Titel
quelle
1
Weder DFAs noch NFAs existieren in der Realität, beide sind nur mathematische Beziehungen und beide können durch Algorithmen simuliert werden.
Jmite
1

ϵ

vonbrand
quelle
ϵ
1
ϵ
aber ist DFA nicht frei von ϵ-Übergängen?
Avi
@avi, ja. Fühlen Sie sich frei, um die Antwort zu bearbeiten, wenn es dort nicht klar ist.
Vonbrand
Nein, ich frage dich. Ich bin mir auch nicht sicher
avi
1

Wie andere angemerkt haben, müssen Sie definieren, was "Effizienz" bedeutet. Um dies zu veranschaulichen, gebe ich ein vernünftiges Modell mit einer anderen Antwort.

Betrachtet man nur die Automatenmodelle, bei denen insbesondere außer Acht gelassen wird, wie sie auf realen Maschinen implementiert werden, so ist das offensichtliche Effizienzmaß die "Anzahl der Übergänge, die bei einem (kürzesten) akzeptierenden Durchlauf ausgeführt werden".

ε

Raphael
quelle
1

Technisch gesehen ist ein NFA ein allgemeineres Konzept als ein DFA, da es nicht erforderlich ist, den Nichtdeterminismus zu verwenden. Mit anderen Worten: Jeder DFA ist ein NFA. Aus dieser Perspektive gibt es für jede Sprache eine NFA, die mindestens so effizient ist wie die effizienteste DFA, unabhängig davon, welche Effizienzmaßnahme Sie bevorzugen.

Abgesehen davon stimme ich Raphael zu, dass es sehr stark darauf ankommt, was Sie mit Effizienz und Umsetzung meinen .

A.Schulz
quelle
-3

Wie wir von Automaten wissen, dh Maschinen, die jede Handlung ohne menschliche Kraft oder ohne direkte Beteiligung des Menschen ausführen können. zB: Waschmaschine. Endliche Automaten bedeuten, dass wir wissen, wie viele Aufgaben maschinell ausgeführt werden: 1 EIN drücken 2 AUS drücken, sodass es nur zwei Zustände gibt, dh endliche Automaten. Kommen wir nun zu DFA, dh deterministischen endlichen Automaten. Formal bedeutet dies, dass wir leicht feststellen können, dass Zustände keine Mehrdeutigkeit aufweisen und informell nur ein Übergang für ein Symbol zulässig ist. NFA: nicht deterministische endliche Automaten. Es wird mehr Zeit benötigt, um den tatsächlichen Zustand zu berechnen, und es gibt Mehrdeutigkeiten. Informell heißt es, dass für ein Symbol mehrere Übergänge zulässig sind. Wenn die Zeit zum Erreichen des Ziels verstrichen ist, benötigt NFA mehr Zeit als DFA, aber NFA kann mehr Daten als DFA laden. * DFA und NFA haben die gleiche Fähigkeit, die Zeichenfolge zu erkennen. Danke. Deepali Kaushik

deepali kaushik
quelle
1
Endliche Automaten haben überhaupt nichts mit Waschmaschinen zu tun.
David Richerby
2
@DavidRicherby. Vielleicht ist der Satz "überhaupt nichts" ein bisschen stark. Immerhin könnte man sagen, eine Waschmaschine hat Zustände bereit , waschen , spülen und schleudern mit entsprechenden Übergängen zwischen den Zuständen. Eine bessere Metapher wäre jedoch ein geldbetätigter Getränkeautomat.
Rick Decker
1
@ RickDecker Einverstanden, aber Zeit damit zu verbringen, die winzige Relevanz zu diskutieren, wäre ein Beispiel für das, was Wikipedia als " übermäßiges Gewicht " bezeichnet. Und der Teil der Antwort, von dem ich spreche, ist auf jeden Fall die Diskussion von Automaten als autarke Maschinen, nicht als Rechengeräte.
David Richerby
1
Ich denke nicht, dass diese Antwort der Frage etwas Wertvolles hinzufügt. Insbesondere sind Sie sich über Ihr Effizienzmaß unklar und scheinen mehrere Bedenken zu vermischen.
Raphael
Die anderen Antworten erschöpfen fast alles, was gesagt werden muss, und Ihre Antwort ist leider etwas verwirrend.
Evil