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 :

Différentes questions algorithmiques


Sujet :

Algorithmes et structures de données

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Différentes questions algorithmiques
    Bonjour,

    j'ai différentes questions d'ordres algorithmiques alors si quelqu'un pouvait m'aider ce serait sympa.

    1)Soient 2 mots x et y de meme taille
    -Comment faire pour savoir si un mot x est un sous-mot de y
    -Donner la longueur maximale des sous mots communs à x et y

    2)comment reconnaitre un graphe biparti

    3)m'expliquer comment fonctionne l'algo de Ford-Fulkerson car je ne le comprend pas du meme que la recherche de la coupure maximale

    Merci de voir aide

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut
    Bonjour,
    1)
    -Comment faire pour savoir si un mot x est un sous-mot de y
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    if (strstr(y, x) != NULL) { printf("%s est une sous-chaîne de %s\n", x, y); }
    -Donner la longueur maximale des sous mots communs à x et y

    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
     
    int i, tmp, max, len;
     
    len  = strlen(x);
    tmp = max = 0;
     
    for (i = 0; i < len; i++) {
      if (x[i] == y[i]) {
        tmp++;
      } else {
        if (tmp > max) {
          max = tmp;
        }
        tmp = 0;
      }
    }
    printf("longueur max : %i\n", max);

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Merci sympho pour ta réponse:

    Je remets les questions qui me posent problème et ou j'ai besoin d'aide

    Merci de votre aide

    1)comment reconnaitre un graphe biparti

    2)m'expliquer comment fonctionne l'algo de Ford-Fulkerson car je ne le comprend pas du meme que la recherche de la coupure maximale

    3)On considère une liste de n chaines de caractères mémorisée dans une table T.
    La longueur maximale des chaines T[0],T[1],...,T[n-1] est notée M.
    On note <= l'ordre lexicographique et on suppose que :
    T[0]<=T[1]<=...<=T[n-1]

    On considère un chaine x de longueur m (|x| = m)
    Ecrire un algo qui fait la recherche dichotomique de x dans T en utilisant la comparaison de caractère

  4. #4
    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
    Attention je crois que le deuxième algo de sympho est faux :
    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
    int i, tmp, max, len;
     
    len  = strlen(x);
    tmp = max = 0;
     
    for (i = 0; i < len; i++) {
      if (x[i] == y[i]) { // ici on ne prend que les sous-mots qui débutent au même index dans les deux chaînes
        tmp++;
      } else {
        if (tmp > max) {
          max = tmp;
        }
        tmp = 0;
      }
    }
    printf("longueur max : %i\n", max);
    Pour cet algo, je pense que tu dois prendre le problème à l'envers, à savoir, si len est la longueur de str1, tu recherches les sous mots de longeur len dans str2, puis les sous mots de longeur len-1, puis len-2 etc, etc, tu t'arrêtes évidemment lorsque tu en as trouvé un !!
    "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

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je suis d'accord avec Trap D, l'algorithme de sympho est faux dans le sens que les mots ne sont pas forèment au même endroit...

    En m'inspirant de son algorithme, voici une proposition: Il faudrait rajouter une boucle pour gérer le décalage:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    int i, j, tmp, max, lenx,leny;
     
    lenx  = strlen(x);
    leny = strlen(y);
     
    max = 0;
     
    for (i = 0; i < leny; i++) 
    {
        tmp = 0;
       //On fait une passe avec un décalage différent grâce à i
       for(j = 0; (j<lenx) && ((i+j) < leny); j++) 
       {
        if (x[j] == y[i+j]) 
             tmp++;
        else 
         {
         if (tmp > max) 
            max = tmp;
     
          tmp = 0;
          }
       }
      //On vérifie si on a un nouveau maximum
      if(tmp > max)  
         max = tmp;
    }
     
    printf("longueur max : %i\n", max);
    Jc

  6. #6
    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
    moi je verraisplutôt un algo de ce style :
    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
    18
    19
    fontion lenmaxsousmot(str1, str2) retour entier
      paramètres
        str1 chaine de caractères
        str2 chaine de caractères
      variables
        len entier longueur de str1
        lenmax entier
     
      pour lenmax de len à 1 par pas de -1 faire
        pour tous les sous mots smot de longueur lenmax de str1
           si smot est un sous mot de str2 alors
             // ici on a gagne, on peut retourner la valeur
             retour lenmax
           fin si
        fin pour
      fin pour
      // si on arrive ici, il n' y a aucun sous mot
      retour 0
    fin fonction
    "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

  7. #7
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Merci à tous pour vos suggestions.

    Une idée sur la manière d'écrire cet algo?

    On considère une liste de n chaines de caractères mémorisée dans une table T.
    La longueur maximale des chaines T[0],T[1],...,T[n-1] est notée M.
    On note <= l'ordre lexicographique et on suppose que :
    T[0]<=T[1]<=...<=T[n-1]

    On considère un chaine x de longueur m (|x| = m)
    Ecrire un algo qui fait la recherche dichotomique de x dans T en utilisant la comparaison de caractère

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/06/2015, 19h13
  2. différentes questions d'un débutant
    Par Nymar dans le forum Débuter
    Réponses: 8
    Dernier message: 28/03/2013, 16h23
  3. Besoin d'aide sur différentes questions.
    Par Kra7os dans le forum Langage
    Réponses: 8
    Dernier message: 05/03/2013, 16h10
  4. Réponses: 3
    Dernier message: 20/09/2009, 18h35
  5. Petite question algorithmique
    Par RodEpsi dans le forum Delphi
    Réponses: 7
    Dernier message: 25/07/2006, 18h40

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