Adloun

Intersection

Exercice · OCaml (option informatique), chapitre 18 — Automates finis

Énoncé

Écrire intersection a b (automate produit) et l'utiliser pour reconnaître les mots qui se terminent par a et ont un nombre pair de a.

Corrigé

let intersection a b =
  let nb_sym = Array.length a.delta.(0) in
  let code p q = p * b.nb_etats + q in
  let n = a.nb_etats * b.nb_etats in
  let delta = Array.make_matrix n nb_sym 0 in
  let acceptants = Array.make n false in
  for p = 0 to a.nb_etats - 1 do
    for q = 0 to b.nb_etats - 1 do
      let e = code p q in
      acceptants.(e) <- a.acceptants.(p) && b.acceptants.(q);
      for s = 0 to nb_sym - 1 do
        delta.(e).(s) <- code a.delta.(p).(s) b.delta.(q).(s)
      done
    done
  done;
  { nb_etats = n; initial = code a.initial b.initial; acceptants; delta }

let les_deux = intersection termine_par_a pair_de_a

L'automate produit fait avancer les deux automates en parallèle ; un état est acceptant ssi ses deux composantes le sont. les_deux reconnaît l'intersection des deux langages.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.