Génération de tous les mots d'un automate

Fermé
manou901 Messages postés 3 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 1 septembre 2014 - 29 août 2014 à 19:28
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 sept. 2014 à 17:59
Bonjour,

J'explique ma situation.

Mon projet permet l'extraction des attributs à partir d'une séquence biologique via les automates. Après la création des automates, je veux générer automatiquement tous les mots possibles de ces automates et les mettre dans un tableau.

Il y a quelqu'un qui peux m'aider et merci d'avance.
A voir également:

7 réponses

mx354 Messages postés 38 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 25 avril 2015 2
29 août 2014 à 19:35
Sur siemens , On utilise une fonction call .. Existe t'il ça en C Je ne sais pas bien à toi
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
31 août 2014 à 22:54
Bonsoir
C'est un peu vague ou j'ai très mal compris ce que tu voulais dire.
Que veux-tu dire par automate de génération de mots ? concrètement de plus, je pense que c'est à partir d'une séquence biologique que ton automate te fournit des mots donc, pour faire simple, c'est à toi de faire une table de correspondance à ses différentes séquences pour que ton automatique puisse te fournir un mot ou un ensemble de groupe de mots. sans avoir plus de détails en ne peut vraiment t'aider.
à bientôt
0
manou901 Messages postés 3 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 1 septembre 2014
1 sept. 2014 à 01:58
Bonsoir,
D'abord, je vais créer un automate avec expression régulière par exemple (a|b)c(g*). Puis, je vais générer tous les mots possibles de cet automate par exemple acg, acgg, bcgggg .... (je peux fixer une longueur maximale de mot si j'ai un boucle dans l'automate) .En fin, je vais insérer ces mots dans un tableau. J'espère j'ai bien expliqué le problème maintenant et merci.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
1 sept. 2014 à 12:04
Bonjour
Comme je tes répondus sur un autre forum, regarde plus du côté des transductions c'est plus de ce côté-là que tu peux trouver ton bonheur
à bientôt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
manou901 Messages postés 3 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 1 septembre 2014
1 sept. 2014 à 15:29
Bonjour,
Je suis en train d'écrire un pseudo code avant de l'implémenter en C, voila ce que j'ai pensé de faire :
Si je fixe une longueur maximale de mot, je peux le faire par récursion : je pars du début de l'automate ; en faisant une boucle sur tous les branchements possibles, je rajoutes la transition aux mots que je veux créer, et j' appelles ma fonction récursive sur chaque état pointée par mes transitions. Si j'obtiens un mot de longueur plus grande qu'un entier que je définis, j'arrêtes la récursion et je ne renvoies pas le mot. Si j'arrives sur l'état final de l'automate, idem, mais je renvoies le mot.
J'ai pensé d'utiliser plutôt des listes chaînées.
je pense j'ai bien expliqué ou pas ?
a bientôt
0
Salut, il faut que tu fasse une analyse récursive des composants (lettres) de tes mots.
Exemple: Soit la liste de lettres "a$" de longueur "n"
Soit "m" le nombre de lettre de tes mots
Soit: "#w.txt," Un textbox (retour à la ligne à chaque boucle)
Algo:
for i=1 to n
for j=i+1 to n
for k=j+1 to n
for m=k+1 to n-1
#w.txt,word$(a$,i);" ";word$(a$,j);" ";word$(a$,k);" ";word$(a$,m)
//mise en ligne des lettres (" "<--espace entre chaque) pour former le mot
//Syntaxe (word$...) en fonction du langage
next m
next k
next j
next i
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
1 sept. 2014 à 17:54
Je ne vois pas le côté récursif...
C'est plutôt de l'itératif.
Cela fonctionne. Maintenant s'il doit générer toutes les combinaisons de 10 caractères. Ca va faire beaucoup de boucles for.
Et il faut plutôt faire for m=k+1 et non for m=1 pour générer toutes les possibilités.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
1 sept. 2014 à 17:59
Bonjour,

Effectivement, le plus simple est de le faire par récursivité.
L'idée est de faire une fonction qui prend en argument le mot généré en cours, la taille et l'indice (qui s'incrémente à chaque à sous-appel de la fonction).
Dans la fonction récursive, tu fais une seule boucle for (de 0 jusqu'à la longueur du mot souhaité) et tu appelles la fonction avec les différents paramètres et avec l'indice incrémenté de 1.
La condition d'arrêt est lorsque la taille est égal à l'indice.
Je te laisse réfléchir pour coder ça. N'hésite pas à poster ton code entre deux balises "code c" pour qu'on te corrige.
Exemple :
<"code c">/*ici tu mets ton code*/<"/code"> (sans les guillemets).

Cdlt,
0