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 :

Petit défi de lettres


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 47
    Points : 30
    Points
    30
    Par défaut Petit défi de lettres
    Bonjour,

    Dans le cadre du développement d'un moteur de recherche, je chercher à décomposer la chaine de requêtes en sous élément de la manière suivante.

    Si q="A B" par exemple l'ago doit renvoyer
    1 - "A B"
    2 -"A", "B"

    Si q="A B C" par exemple, l'agorithmes doit me renvoyer :
    1-"A B C"
    2 - "A B", "C"
    3 -"A", "B C"
    4- "A","B","C"

    Si q="A B C D" par exemple l'ago doit me renvoyer
    1-"A B C D"
    2-"A B C","D"
    3-"A", "B C D"
    4-"A B","CD"
    5- "A", "BC", "D"
    ....


    Je vois bien que ça avoir avec les arrangements ou quelque chose comme ça mais impossible de trouver la règle pour me renvoyer ça quelque soit la chaine q, si vous avez des idées, je suis plus que preneur !!!!

    Merci

    Thibaud

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    sous la forme dont tu l'as écrit, un séparateur évident dans ta chaine de caractère est l'espace.
    Tu peux peut etre essayer de décomposer ta phrase dans un tableau de mots (chaine de caractères).
    Ensuite, il te restera à faire les combinaisons que tu souhaites (strcat power).

    Thibault (mais c'est mon nom de famille )
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Bonjour Monsieur Thibault

    Je l'ai mis sous forme de chaine pour simplifier mais ma question ce n'est pas comment gérer les chaines de caractère, c'est trouver les combinaisons. On pourrait résonner tout simplement avec des nombres. Je cherche donc la fonction qui au nombre 123 associe

    123
    12-3
    1-23
    1-2-3

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Alors,
    si les - représentent un espaces, ou tout autre caractère et que le longueur de ta chaine soit 3 ( 123 ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    pour i de 1 à taille-1 // gère le nombre de trous
         récursivité pour placer les espaces (ou trous) à tout les endroits possible sauf au début ou à la fin en ajoutant la condition que deux blancs ne peuvent se toucher
         Donc autant d'appels que de trous
    c'est un algo comme ca qu'il faut faire, la récursivité semble inévitable.

    Bon courage.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    On a un nombre N d'éléments, qui peuvent être ou non séparés par un blanc.
    On peut repésenter l'état du système par un nombre binaire X de N-1 chiffres. Un 1 repésente un blanc, un 0 pas de blanc. La position de chaque chiffre correspond à celle d'un blanc.

    Par exemple pour N = 4
    000 --> ABCD
    001 --> ABC D
    010 --> AB CD
    011 --> AB C D
    100 --> A BCD
    101 --> A BC D
    110 --> A B CD
    111 --> A B C D

    Le problème est que l'on considère alternativement X comme un nombre binaire puis comme un motif, ce qui n'est pas orthodoxe. En revanche, l'implémentation est simple : X est un entier, dans les deux cas.

    [Edit] Oops! Je viens de m'apercevoir que vous désirez d'abord les solutions à un trou, puis à deux troux, etc... Oubliez ce qui précède, je vais trouver mieux.[/Edit]

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Deux solutions.
    A. Réutiliser la proposition précédente, en comptant le nombre de blancs à chaque fois.

    B. Faire une boucle sur le nombre de blancs que l'on veut.
    A chaque itération, placer les blancs à droite, puis utiliser des boucles pour les dépacer vers la gauche. Je soupçonne cette solution dêtre compliquée.
    000111
    001011
    001101
    001110
    010011
    etc...
    pour 3 blancs sur six positions doit déjà être long à coder. Alors m blancs sur N-1 postions...

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Personnellement, j'utiliserai une file avec un marqueur de fin de file
    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
    17
    // initialisation de l'algo
    enfiler la liste formée de la première lettre
    enfiler le marqueur de fin de file
     
    // algo proprement dit
    tant que la liste des lettres n'est pas vide faire
      lettre <- prochaine_lettre
      liste <- defiler un élement de la file
      tant que  liste <> marqueur de fin de file faire
        nouvelle liste <- ajouter la lettre à la liste séparé par une virgule
        enfiler la nouvelle liste 
        nouvelle liste <- la liste + la lettre collée
        enfiler la nouvelle liste
      fin tant que
      enfiler le marqueur de fin de file
      liste <- defiler un élement de la file
    fin tant que
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Merci BugFactory (et les autres )

    Ta méthode est propre, rapide et surtout trés belle. Je l'ai implémenté en deux lignes en php. Bravo !!

    Thibaud

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/05/2009, 20h11
  2. Un petit défi : tester si une chaîne est un nombre romain
    Par rambc dans le forum Général Python
    Réponses: 1
    Dernier message: 09/04/2009, 12h43
  3. Petit défi SQL (Update avec condition)
    Par Angeldu74 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 03/03/2009, 12h55
  4. Petit défi en PHP
    Par davidedj dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 11
    Dernier message: 28/08/2006, 18h10
  5. [W3C] Petit défi : Alignement et compatibilité IE et FF
    Par StreM dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/09/2005, 15h33

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