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 :

sequence et permutations


Sujet :

Algorithmes et structures de données

  1. #1
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut sequence et permutations
    Bonjour,

    je cherche un algorithme efficace pour recoller des morceaux dans une sequence d'elements.
    Par exemple prenons cette suite de caracteres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    x1x1xx1x1x1x11xxxx
    comment obtenir une suite consecutive de 7 fois '1' en effectuant le moins d'operations possibles,
    sachant qu'une operation est une permutation de 2 caracteres?

    une fois que ce probleme est resolu, je voudrais extraire, a partir d'une sequence semblable
    mais beaucoup plus longue, la sous-sequence qui va générer le moins de permutations si on lui
    applique l'énoncé d'au-dessus.
    Exemple pour illustrer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    const char *big_sequence[] = "xxxx1x1xx1x1x1x11xxxxxxxxxxxx11111x1";
    const int count = 7;
    char *sub_sequence = extract(big_sequence, '1', count);
    printf("sous-sequence: %s\n", sub_sequence);
    nous affichera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sous-sequence: 1xxxxxxxxxxxx11111x1
    en effet dans cette sous-sequence il suffit de permuter le premier '1' avec le dernier 'x' pour obtenir la suite de 7 fois '1' qu'on cherchait et c'est la sous-sequence qui necessite le moins d'operations (une seule permutation)

    par intuition je dirais que ca ressemble a un algo de tri/selection...
    d'avance merci pour vos suggestions

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Par défaut
    Je te conseillerais tout d'abord de faire un bubble sort (tri à bulles).

    regarde sur wiki.

  3. #3
    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
    Par défaut
    D'abord je ferais un parcours de la chaîne pour compter le nombre d'éléments de chaque catégorie et essayer de repérer où et avec quel élément on peut situer la chaîne la plus longue déjà constituée.
    Je travaillerais ensuite avec 2 pointeurs l'un qui part du début de chaîne l'autre de la fin pour effectuer les échanges.
    C'est juste une piste, il faut approfondir.
    "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

  4. #4
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    ben le bubble regroupera les '1' mais ne le fera pas en un minimum de permutations je crois. Or il faut garantir un nombre minimal de déplacements :/
    je suis parti sur l'idée suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    1 - selectionner la portion qui comporte le maximum de '1'
    2 - pour chaque element c de cette portion
           si (c != '1')
    2a -      selectionner un element d = '1' en dehors de la portion
    2b -      permuter c et d;
           fin si
         fin pour
    en reprenant l'exemple du post initial ca donnerait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x1x1xx1x1x1x11xxxx     // selection de la plus longue portion de '1'
    xxx1xx111x1x11xxxx
    xxxxxx11111x11xxxx
    xxxxxx1111111xxxxx
    ce qui nous ferait 3 permutations... maintenant la partie difficile etant de selectionner la portion et de choisir les bons candidats pour les permutations en un minimum de temps

    [Edit: cross-post, Trap D tu as été plus rapide que moi merci je vais creuser ton idée]

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Vous etes bien complique. On cherche est la suite de 7 caracteres contenant le plus de 1. Ensuite on l'etend pour avoir assez de 1.

  6. #6
    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 Jean-Marc.Bourguet Voir le message
    Vous etes bien complique. On cherche est la suite de 7 caracteres contenant le plus de 1. Ensuite on l'etend pour avoir assez de 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    111110000000101110111
    Yes. ca marche.

    (j'avais pas compris qu'on pouvait permuter deux elements non adjacents )
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    (j'avais pas compris qu'on pouvait permuter deux elements non adjacents )
    Je l'ai compris grace a l'exemple. Jusque l'a j'avais suppose que ce n'est pas permis.

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

Discussions similaires

  1. programmation corba: le type "sequence"
    Par Kali dans le forum CORBA
    Réponses: 4
    Dernier message: 28/08/2005, 16h09
  2. peut-on savoir si un champ a une sequence??
    Par e11137 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 09/01/2004, 14h54
  3. [Algo] Permutations et arrangements
    Par rbag dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 13/10/2003, 11h40
  4. voir les sequences existantes ?
    Par soniaSQL dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 25/06/2003, 16h33
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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