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 :

plus courte sous suite commune


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 33
    Points : 12
    Points
    12
    Par défaut sous suite commune
    Bonjour à tous,
    Je voudrais savoir la signification d'un algorithme qui calcule la plus courte sous suite commune de deux éléments.
    Pour la plus longue sous suite, j'ai trouvé plein de références, mais la plus courte, je n'ai pas trouvé d'explications.
    Je ne sais pas comment je pourrais écrire un algorithme si je ne sais pas ce qu'il doit faire exactement.
    Si quelqu'un à une idée.
    Merci à tous.

  2. #2
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Facile : la plus petite suite commune, c'est la suite "vide".

    Plus sérieusement, tu es sur que c'est la plus "courte" sous suite commune que tu dois chercher ?

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 33
    Points : 12
    Points
    12
    Par défaut
    Je suis sérieuse, je ne plaisante pas et d'ailleurs j'ai même pas le temps pour plaisanter, à moins qu'il n'y ait une erreur dans l'énoncé.
    L'exemple donné dans l'exo était le suivant:
    A = informatique B = fourniture
    C(la plus petite sous suite commune) serait (infourmatniqture)
    Après une longue recherche, j'ai trouvé ce qu'on appelle "la plus courte super sous suite commune". et je me suis dit que c'est peut être ça. Pouvez vous me dire, d'après cet exemple s'il s'agit de ça ou pas.
    Merci.

  4. #4
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par biba1980 Voir le message
    Pouvez vous me dire, d'après cet exemple s'il s'agit de ça ou pas.
    je ne pense pas...

    Je pense que ce serait fo :

    informatique
    fourniture

    quel ensemble de lettres dans le même ordre et accolées est-il commun entre les 2 chaînes ?

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    A priori le problème serait "la plus courte super suite commune" ou un truc comme ça, en tout cas, quel que soit le nom approprié, la définition d'une "super suite commune" serait la suivante : Elle contient A et B comme sous-suites (par exemple AB convient, BA aussi). Et il faut donc trouver la plus courte ou une plus courte.

    --
    Jedaï

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Un premier algorithme serait :
    Code Haskell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    -- shortest common supersequence
    scs :: (Eq a) => [a] -> [a] -> [a]
    scs [] ys = ys
    scs xs [] = xs
    scs xxs@(x:xs) yys@(y:ys)
        | x == y    = x : scs xs ys
        | otherwise = minBy (comparing length) (x : scs xs yys) (y : scs xxs ys)
     
    minBy :: (a -> a -> Ordering) -> a -> a -> a
    minBy comp x y =
        case comp x y of
          LT -> x
          _  -> y
    Mais son efficacité est horrible bien sûr (tout comme l'algorithme naïf pour lcs), donc il faudrait introduire de la programmation dynamique, je laisse ça au soin du posteur, je pense avoir déjà bien débroussaillé le sujet !

    --
    Jedaï

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 33
    Points : 12
    Points
    12
    Par défaut
    Si ce programme était écrit simplement en pseudo code, ça aurait était mieux. Car je n'ai pas tout saisi.
    En tout cas, l'essentiel c'est que j'ai connu le principe.
    Merci à tous.

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    En pseudocode donc :
    Code Pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    scs(xs, ys) =
      Si xs est vide 
      Alors ys
      Sinon (
        Si ys est vide
        Alors xs
        Sinon (
          Soit (x,y) := (premier élément de xs, premier élément de ys)
          Si x = y
          Alors x concaténé à scs(suite de xs, suite de ys)
          Sinon minimum selon longueur entre (x concaténé à scs(suite de xs, ys)) et (y concaténé à scs(xs, suite de ys))
        )
      )

    C'est plus facile à lire ?
    (NB : Le passage à la programmation dynamique de SCS est parfaitement identique à celui de LCS)
    --
    Jedaï

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 33
    Points : 12
    Points
    12
    Par défaut
    Merci, ce que je voulais savoir c'était juste de connaître si c'est bien de rechercher la plus courte super sous suite commune.
    Mais, t'es sûr que ton programme résolut vraiment ce problème?

  10. #10
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par biba1980 Voir le message
    Merci, ce que je voulais savoir c'était juste de connaître si c'est bien de rechercher la plus courte super sous suite commune.
    Oui c'est bien le problème SCS (shortest common supersequence)

  11. #11
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par biba1980 Voir le message
    Merci, ce que je voulais savoir c'était juste de connaître si c'est bien de rechercher la plus courte super sous suite commune.
    Mais, t'es sûr que ton programme résolut vraiment ce problème?
    C'est pas "super sous suite" c'est "super suite" (une "super-suite" de A c'est une suite qui contient A comme sous-suite).
    Et mon programme résout proprement le problème, il est simple de le vérifier par induction.

    --
    Jedaï

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 33
    Points : 12
    Points
    12
    Par défaut
    Oui, alors merci à tous.

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

Discussions similaires

  1. Algorithme plus longue sous-sequence commune
    Par milfrousse dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 05/06/2014, 10h16
  2. Plus grandes sous-chaînes communes à deux chaînes
    Par steckdenis dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 20/01/2010, 14h38
  3. quel algorithme pour trouver le plus grand sous arbres commun à des arbres?
    Par iwky911 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 20/05/2009, 21h08
  4. Suite d'instructions la plus courte possible
    Par didine_napster dans le forum Assembleur
    Réponses: 6
    Dernier message: 13/02/2007, 10h46
  5. Algorithme de plus grand sous-mot commun
    Par nicolas66 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 28/11/2006, 13h24

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