Je génère des DFA aléatoires pour tester un algorithme de réduction DFA sur eux.
L'algorithme que j'utilise actuellement est le suivant: pour chaque état , pour chaque symbole de l'alphabet c , ajoutez δ ( q , c ) à un état aléatoire. Chaque état a la même probabilité de devenir un état final.
Est-ce une bonne méthode pour générer des DFA non biaisés? En outre, cet algorithme ne génère pas de DFA de découpage (un DFA sans états obsolètes), donc je me demande s'il existe un meilleur moyen de générer des DFA aléatoires qui peuvent en quelque sorte garantir qu'il est découpé?
Réponses:
Consultez [1] et la discussion de la section 4, Génération aléatoire d'automates. Le document compare différents algorithmes de minimisation DFA. Un générateur aléatoire uniforme est utilisé qui produit des représentations de chaînes canoniques de DFA complets avec états et k symboles. Ils discutent également d'autres méthodes.n k
[1] Almeida, M., Moreira, N. et Reis, R. (2007). Sur les performances des algorithmes de minimisation des automates. Logique et théorie des algorithmes, 3.
la source
Vous devriez regarder la page d'accueil de Cyril Nicaud . En particulier, les références suivantes sont pertinentes pour votre question:
F. Bassino, J. David et C. Nicaud, Énumération et génération aléatoire d'automates déterministes éventuellement incomplets, Mathématiques pures et applications 19 (2-3) (2009) 1-16.
F. Bassino et C. Nicaud. Dénombrement et génération aléatoire d'automates accessibles. Théor. Comp. Caroline du Sud. . 381 (2007) 86-104.
la source
Il existe des algorithmes pour générer aléatoirement des DFA jusqu'à une permutation http://paranthoen.thomas.free.fr/PAPERS/RandDFAToAppearInTCS.ps.gz .
Mais, il est également mentionné dans le document ci-dessus que presque tous les DFA sont déjà minimes. Les DFA non minimaux sont comme des nombres premiers ... ils sont peu nombreux. Et si vous utilisez cet algorithme pour tester l'algorithme de minimisation, ce sera comme si vous testiez un algorithme sur un nombre premier avec un simple générateur de nombres aléatoires. Afin d'avoir plus de DFA non minimaux, vous pouvez modifier l'algorithme en ajoutant un état récepteur et rediriger un pourcentage important des transitions vers cet état récepteur.
Mais de mon point de vue, si vous voulez tester la rapidité de votre implémentation, vérifiez-la par rapport à ce que vous voulez l'utiliser: avec des ensembles de mots aléatoires ou REGEX aléatoire, créez un NFA ou un DFA, puis minimisez le DFA résultant .
la source
la source