web-dev-qa-db-fra.com

Comment utiliser la construction d'intersection pour former un DFA?

Je fais des devoirs pour ma classe de théorie du calcul et suis un peu confus de savoir comment combiner 2 DFA. Le livre dit qu'il utilise la "construction d'intersection" pour le faire, mais je ne suis pas sûr de ce que c'est. Voici 2 exemples:

enter image description here

enter image description here

25
jfisk

L'idée est assez simple, bien que je puisse voir où la confusion règne. Je vais donner une description textuelle/symbolique du processus de fabrication des machines d'intersection (union, différence) via la construction de la machine à produit cartésien (même chose que vous parlez sur).

Un DFA est un 5 tuple (E, Q, q0, A, f) où

  1. E est l'alphabet en entrée, un ensemble fini de symboles non vides
  2. Q est l'ensemble des états, non vide et fini
  3. q0 est l'état de départ, un élément de Q
  4. A est l'ensemble des états acceptant ou final, un sous-ensemble de Q
  5. f est la fonction de transition, prenant des paires de Q x E à Q

Disons que nous avons deux machines M '= (E', Q ', q0', A ', f') et M '' = (E '', Q '', q0 '', A '', f '') . Pour faciliter la discussion, supposons que E '= E' '. Nous allons maintenant construire M '' 'de sorte que L (M' '') = L (M ') se croisent (ou s'unissent ou se différencient) L (M' ').

  1. Prenez E '' '= E' '= E'
  2. Prendre Q '' '= Q' x Q ''
  3. Prenez q0 '' '= (q0', q0 '')
  4. Prenez A '' '= (x, y) où x dans A' et y dans A '' (pour union, x dans A 'ou y dans A' '; pour différence, x dans A' mais pas y dans A ' ').
  5. Prenez f '' '((x, y), e) = (f' (x, e), f '' (y, e)).

Voilà! Considérons maintenant deux machines: une qui accepte un ^ 2n et une qui accepte un ^ 3n (l'intersection doit être une machine acceptant un ^ 6n ... n'est-ce pas?).

Pour moi, nous avons ...

  1. E '= {a}
  2. Q '= {s0, s1}
  3. q0 '= s0
  4. A '= {s0}
  5. f '(s0, a) = s1, f' (s1, a) = s0

Pour M '', nous avons ...

  1. E '' = {a}
  2. Q '' = {t0, t1, t2}
  3. q0 '' = t0
  4. A '' = {t0}
  5. f '' (t0, a) = t1, f '' (t1, a) = t2, f '' (t2, a) = t0

Pour M '' ', nous avons ...

  1. E '' '= {a}
  2. Q '' '= {(s0, t0), (s0, t1), (s0, t2), (s1, t0), (s1, t1), (s1, t2)}
  3. q0 '' '= (s0, t0)
  4. A '' '= {(s0, t0)} pour l'intersection {(s0, t0), (s0, t1), (s0, t2), (s1, t0)} pour l'union, {(s0, t1) (s0, t2)} pour la différence.
  5. f '' '((s0, t0), a) = (s1, t1), f' '' ((s1, t1), a) = (s0, t2), f '' '((s0, t2) , a) = (s1, t0), f '' '((s1, t0), a) = (s0, t1), f' '' ((s0, t1), a) = (s1, t2), f '' '((s1, t2), a) = (s0, t0).

Et voilà! S'il vous plaît laissez-moi savoir si cela nécessite une clarification.

45
Patrick87

Ce sont: {S∈ {a, b, c}: tout a en s est immédiatement suivi de ab} {S∈ {a, b, c} ∗: tout a en s est immédiatement suivi par ab} et {s∈ {a, b, c} ∗: tout c dans s est immédiatement précédé de ab}  enter image description here

Devant un autre automate, vous pouvez joindre les états "0" et "2". 

et vous devez conserver cela ...

Il existe un moyen précis de réaliser des automates pour le croisement des langues. Soit AA et BB les automates d’entrée. Les cas de nouvel automate seront toutes les paires d'états de AA et BB, c'est-à-dire SA∩B = SA × SBSA∩B = SA × SB, l'état initial sera iA∩B = iA, iB⟩iA∩B = ⟨IA, iB⟩, où iAiA et iBiB sont les états initiaux de AA et BB, et FA∩B = FA × FBFA∩B = FA × FB où FXFX désigne l'ensemble des états acceptants de XX. Enfin, la fonction de transition δA∩BδA∩B est définie comme suit pour toute lettre α∈Σα et déclare p1, p2∈SAp1, p2∈SA, q1, q2∈SBq1, q2∈SB:

⟨P1, q1⟩− → −−A∩B α ⟨p2, q2⟩ si bien p1− → A α p2andq1− → B ​​α q2 ⟨P1, q1⟩ → AB α ⟨p2, q2⟩ iff p1 → A α p2andq1 → B α q2 .__ Veuillez noter qu'un tel automate n'est généralement pas minimal (l'intersection peut par exemple être un langage vide). De plus, il pourrait être utile (mais ce n’est pas nécessaire) de rendre les automates d’entrée minimaux car la sortie a une taille quadratique . // Référence: math.stackexchange.com Happy Coding ...

0
Sohaib Aslam