Afficher dans un arbre n aire

Afficher dans un arbre n aire - C - Programmation

Marsh Posté le 06-02-2006 à 15:33:26    

Bonjour tout le monde,
 
Voila j'ai une question en programmation C je doit realiser un arbre binaire dans lequel j'insere un dictonnaire, pour le moment pas de probleme, mais voila je doit des que je tape une chaine de chiffre telle que 2637 mettre tout les mots qui respectent ces chiffres.
Je m'explique pour la lettre "a" le champ touche de sa structure est de 2, b et c aussi à  la maniére des touche de portable.Pour la touche 6 les lettres correspondantes sont m, n et o.
Donc pour la chaine 2637 je devrai afficher :
ames
anes
bods
 
mais j'arrive qu' afficher ames
je vois pas comment lui dire de faire tous les trajets possible.
 
J'ai tout essayer et je vois vraiment pas je pense qu il va falloir le faire de maniere recursive, mais meme de cette maniere je ne vois pas.
Si quelqu'un a  une idee ce serait sympa car là je ne vois pas.
Merci d'avance


Message édité par elbrabra le 11-02-2006 à 16:29:32
Reply

Marsh Posté le 06-02-2006 à 15:33:26   

Reply

Marsh Posté le 06-02-2006 à 17:20:15    

Quelque chose comme ça :

Code :
  1. Fonction explore : (nombre, chaine, noeud)
  2.   si (premier chiffre du nombre = touche)  // Le noeud correspond
  3.     nouvelle_chaine = chaine + lettre
  4.     si (aucun fils)
  5.       si (nombre < 10)  // On vient de trouver un mot
  6.         ajouter nouvelle_chaine a la liste de mots
  7.     sinon
  8.       si (nombre > 9)
  9.         pour chaque fils
  10.           explore (nombre sans le premier chiffre, nouvelle_chaine, fils)

L'utilisation d'un arbre binaire est imposée ? Un arbre n-aire semble beaucoup plus adaptée (et moins redondante), non ? Un langage de plus haut niveau serait également plus adapté à mon avis mais ça c'est un autre débat. :-)
C'est pour faire de la prédiction de saisie sur T12/T15 ?


---------------
Viendez vous battre à Prologin \o/
Reply

Marsh Posté le 06-02-2006 à 18:16:18    

Salut zavie pour le langage le C c'est en fait le langage que je maitrise le mieux donc le choix a ete vite fait.
Sinon c'est en effet fait pour une prediction de saisie de type T Q, ke systeme qui fonctionne actuellement sur les portable.
 
Sinon excuse moi mais j'ai pas tres bien compris cette partie de l'algo;

Code :
  1. si (aucun fils)     
  2.                si (nombre < 10)  // On vient de trouver un mot         
  3.                               ajouter nouvelle_chaine a la liste de mots
  4. sinon     
  5.                si (nombre > 9)       
  6.                               pour chaque fils          explore (nombre sans le premier chiffre, nouvelle_chaine, fils)


Message édité par elbrabra le 11-02-2006 à 16:28:29
Reply

Marsh Posté le 06-02-2006 à 21:23:56    

C'est une erreur : je me basais sur la valeur du nombre, mais ça pose problème pour des mots s'écrivant avec des zéros. Il faut utiliser une chaine de caractères numériques plutôt qu'un entier.
 
L'idée est la suivante : si on arrive à un noeud terminal, ça veut dire que d'après le dictionnaire on est à la fin du mot. Si la chaine ne compte qu'un chiffre, ça colle. Si le noeud n'est pas un noeud terminal, il faut vérifier au contraire que la chaine compte au moins deux chiffres (ou alors dans le cas où il y a de la prédiction, on va explorer au delà de ce que l'utilisateur a déjà tapé, et l'algo est forcément différent). Dans ce cas, on continue le parcours en profondeur en utilisant la chaine numérique commençant au chiffre suivant.
 
(Edit : typo, paranthèses)


Message édité par Zavie le 06-02-2006 à 21:34:02

---------------
Viendez vous battre à Prologin \o/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed