IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Algo pour un pseudo T9 : toute les possibilité de chaine entre abc et def


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut Algo pour un pseudo T9 : toute les possibilité de chaine entre abc et def
    Bonjour,

    Je cherche un algo pour faire un pseudo T9 pour téléphone.

    je m'explique :

    J'ai un téléphone VOIP sur lequel j'ai un menu qui me permet de chercher un N° de téléphone en tapant le nom de la personne. Suite à cela le téléphone effectue une requête sur un serveur. Ce serveur renvoie le résultat après consultation de la base de données.

    exemple :

    Je recherche "Toto"

    Je tape "Toto" sur mon téléphone.
    Le serveur récupère la variable "toto" et effectue une requête SQL.
    Si "toto" existe, le serveur renvoie le N° de téléphone.

    Ce que nous voulons faire est un peu plus complexe.

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Clavier du téléphone
     
     1     2     3
          abc  def
     4     5     6
    ghi   jkl   mno
     7     8     9
    pgrs tuv wxyz
    Je veux trouver "Arnaud", je tape sur les touches 2;7;6;2;8;3, seulement si je tape sur ces touche, j'aurai la chaine suivante : "apmatd".

    Le but serai donc d'avoir toute les posibilitée possible avec cette combinaison de touche.

    exemple :

    je tape 2;7;6;2;8;3
    je peux avoir comme chaine :
    "apmatd","bpmatd","cpmatd"
    "aqmatd","bqmatd","cqmatd"
    "armatd","brmatd","crmatd"

    etc...

    Comment faire toute ces possibilités ? sachant que cette algo sera écrit en PHP. En faite le problème est que je ne sais pas comment géré la profondeur de champ. Je sais faire toute les possibilité entre 4 caractère avec 4 boucles, mais dans mon cas, je ne connais pas en avance le profondeur de champ.


    Merci d'avance

    Cordialement

    Arnaud

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    et après on se demande pourquoi les menus te renvoient n'importe quoi

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    et après on se demande pourquoi les menus te renvoient n'importe quoi
    pourquoi tu dis cela ?

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par arnaudperfect Voir le message
    Je veux trouver "Arnaud", je tape sur les touches 2;7;6;2;8;3, seulement si je tape sur ces touche, j'aurai la chaine suivante : "apmatd".
    Quand tu tapes sur les touches tu obtiens un produit cartésien de 6 listes:

    [abc]x[pgrs]x[mno]x[abc]x[tuv]x[def]

    Il suffit de développer ce produit pour avoir les mots possibles.



    NB: On peut faire une analogie avec le developpement d'expressions algebriques:

    (a+b+c)*(p+g+r+s)*(m+n+o)*(a+b+c)*(t+u+v)*(d+e+f) = apmatd+apmate+apmatf+apmaud+....
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Un algo simple transcire en PHP ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     // LettersCount: nombre total de lettre du mot
     // Words       : liste des mots à construire
     // CharLists[i]:  liste des caractères possible pour la ième touche tapée.
    // procedure principale 
    Words.Clear() ;
    Words.Add("") ;
    For i=0 to LettersCount-1 do AddCombination(Words,CharLists[i]) ;
    
    // procedure appelée
    procedure AddCombination(Words ,CharList)
    For j=1 To CharList.Count-1 
         do for k=0 To Words.Count-1 do 
              Words.Add(Words.Add(Words[k]+Charlist[j]) ;
    for k=0 To Words.Count-1 do 
         Words[k]=Words[k]+CharList[0]) ;
    return

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Un algo simple transcire en PHP ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     // LettersCount: nombre total de lettre du mot
     // Words       : liste des mots à construire
     // CharLists[i]:  liste des caractères possible pour la ième touche tapée.
    // procedure principale 
    Words.Clear() ;
    Words.Add("") ;
    For i=0 to LettersCount-1 do AddCombination(Words,CharLists[i]) ;
    
    // procedure appelée
    procedure AddCombination(Words ,CharList)
    For j=1 To CharList.Count-1 
         do for k=0 To Words.Count-1 do 
              Words.Add(Words.Add(Words[k]+Charlist[j]) ;
    for k=0 To Words.Count-1 do 
         Words[k]=Words[k]+CharList[0]) ;
    return
    Je ne comprend pas trop ton algo... Je suis débutant en la matière? Pourrais tu m'expliquer un peux plus ?

    merci d'avance

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Quand tu tapes sur les touches tu obtiens un produit cartésien de 6 listes:

    [abc]x[pgrs]x[mno]x[abc]x[tuv]x[def]

    Il suffit de développer ce produit pour avoir les mots possibles.



    NB: On peut faire une analogie avec le developpement d'expressions algebriques:

    (a+b+c)*(p+g+r+s)*(m+n+o)*(a+b+c)*(t+u+v)*(d+e+f) = apmatd+apmate+apmatf+apmaud+....
    Je suis d'accord avec ta logique.

    Je pense que pour développer ce produit, il faut faire des boucle imbriqué ? mais dans ce cas, comment géré le profondeur de champ pour dire au langage que suivant le nombre de carractère dans ma chaine, je devrai faire autant de boucle imbriqué.

    Ou alors je n'ai pas la bonne méthode.

    merci de ton explication en tout cas.

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par arnaudperfect Voir le message
    Je pense que pour développer ce produit, il faut faire des boucle imbriqué ? mais dans ce cas, comment géré le profondeur de champ pour dire au langage que suivant le nombre de carractère dans ma chaine, je devrai faire autant de boucle imbriqué.

    Ou alors je n'ai pas la bonne méthode.
    Regarde l'algo de Graffito.

    Le principe c'est de faire les "mutliplications" les unes apres les autres:

    L = {a,b,c}
    L = L*{p,g,r,s}
    L = L*{m,n,o}
    ...

    A chaque étape, on "mutliplie" la liste existante avec le nouveau paquet de lettres. Ca revient a dupliquer la liste existante et ajouter une lettre au bout de chaque element de la liste:

    L={a,b,c}
    L*{p,g,r,s} = {L*p , L*g, L*r, L*s }

    avec:
    L*p= {a,b,c}*p = {ap,bp,cp}
    L*g= {a,b,c}*g = {ag,bg,cg}
    ...

    d'où:
    L*{p,g,r,s} = {ap,bp,cp,ag,bg,cg,ar,br,cr,as,bs,cs}
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Regarde l'algo de Graffito.

    Le principe c'est de faire les "mutliplications" les unes apres les autres:

    L = {a,b,c}
    L = L*{p,g,r,s}
    L = L*{m,n,o}
    ...

    A chaque étape, on "mutliplie" la liste existante avec le nouveau paquet de lettres. Ca revient a dupliquer la liste existante et ajouter une lettre au bout de chaque element de la liste:

    L={a,b,c}
    L*{p,g,r,s} = {L*p , L*g, L*r, L*s }

    avec:
    L*p= {a,b,c}*p = {ap,bp,cp}
    L*g= {a,b,c}*g = {ag,bg,cg}
    ...

    d'où:
    L*{p,g,r,s} = {ap,bp,cp,ag,bg,cg,ar,br,cr,as,bs,cs}

    ok j'ai très bien compris ton explication !

    En faite il faut faire une distribution.

    Reste à savoir comment codé cela...
    j'ai étudier l'algo de Graffito, mais manque quelques explications

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/06/2012, 15h58
  2. Enumérer toutes les possibilités
    Par psyko72 dans le forum Prolog
    Réponses: 8
    Dernier message: 20/04/2007, 18h11
  3. Réponses: 15
    Dernier message: 03/04/2007, 12h51
  4. logiciel pour compresser et décompresser tout les formats
    Par vampyer972 dans le forum Autres Logiciels
    Réponses: 12
    Dernier message: 28/02/2006, 19h29
  5. [VB] Calcul de toute les possibilité
    Par Stan Trinity dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/11/2005, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo