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 :

[Débutant] Sous sequence croissante (ou decroissante).


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Par défaut [Débutant] Sous sequence croissante (ou decroissante).
    Comment fait-on pour "isoler" dans une séquence quelconque de nombres, les sous séquences croissantes?
    Par exemple, dans cette séquence: 1 2 3 4 2 3 4 5; il y a 6(six) "augmentations" mais seulement 2(deux) (sous) séquences croissante.
    Merci.

  2. #2
    Membre expérimenté
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Par défaut
    Si j'ai bien compris ce que tu appelles sous-séquence croissante, les deux dont tu parles sont 1234 et 2345, c'est ça ?

    A ce moment là, l'algorithme me parait simple.
    Tu parcours la séquence depuis le début, et tu ajoutes dans une séquence temporaire tous les nombres que tu lis tant qu'ils sont supérieurs à ceux déjà lus. Quand la boucle s'arrête, tu sauvegarde la position, la séquence temporaire, réinitialise la séquence temporaire, et tu recommences la boucle depuis la position sauvegardée.

    C'est bien ce que tu voulais ?

  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
    Tu peux définir une "structure séquence" : {entier debut, entier longueur} et un tableau de "structure séquence"
    ensuite ton algo sera comme celà
    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
    structure sequence tab_seq // tableau des sequences
    entier num_seq // numéro de la sequence en cours (indice dans le tableau 
    entier deb_seq // debut de la sequence en cours
    entier i // indice permettant de parcourir la séquence globale de nombres
    entier val(i) // valeur du nombre d'indice i dans la sequence globale
    constante entier len_sequence // longueur de la sequence globale
    // initalisation de l'algo
    num_seq <- 1
    deb_seq <- 1
    i <- 2 // on compare au nombre précédant 
    tant que i <= len_sequence faire
    debut
      si val (i) < val(i-1) alors
      debut
        si i - deb_seq >  1 alors
        debut
           tab_seq[num_seq].debut <- deb_seq
           tab_seq[num_seq].longueur <- i - deb_seq
           num_seq <- num_seq + 1
        fin
        deb_seq <- i
      fin
      i <- i + 1
    fin
    "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
    Membre confirmé Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Par défaut
    Oui, les deux sous séquences sont: 1234 et 2345.
    Ceci est un genre d'exercice et la solution était seulement de comparer la variable "précédente" avec la variable "courante"; si "courante" était supérieur à "précédente" alors on incrémente le "compteur".
    Or, cette solution, nous donne toute les augmentations et non les sous-séquences croissantes, ce qui ne répond pas à l'énnoncé et donc ne me convient pas.
    Depuis, j'ai pensé à faire une évaluation non pas sur deux variables, mais sur trois; par exemple: "ancienne", "précédente", "courante" avec si "précédente" > "ancienne" alors incrémentation du "compteur" mais ensuite si "courante" > "précédente" alors ne rien faire.
    Il me semble que cette solution ne soit pas valable non plus, car à chaque décalage ("précédente" devient "ancienne", "courante" devient "précédente") on se retrouve avec le même problème qu'avec la première solution.
    Est-il possible donc, d'identifier ces sous-séquences de façon assez simple, comme une (ou plusieurs) comparaison de variable?
    Je vous rappelle que je suis débutant et souhaite juste avoir une solution assez simple à mettre en oeuvre mais qui réponde tout de même au problème, ce qui n'était pas le cas de la solution de correction de l'exercice.

  5. #5
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut
    relis bien les deux réponses qui t'ont été donnée, car il me semble qu'elles te donnent bien les sous-séquences, et non seulement les "augmentations":

    une séquence peut etre définie par 2 nombres: le premier et le dernier.

    la plus petite séquence possible contient un seul nombre: premier=dernier.
    au début, tu mets: premier=derniert=le premier nombre de ta séquence:

    1 2 3 4 2 3 4 5
    premier=1
    dernier=1
    a chaque pas, tu regarde si le nombre suivant est plus grand que le dernier. si oui, tu dis que c'est le dernier. si non, tu termines ta séquence:

    1 2 3 4 2 3 4 5
    2>1? oui! on change le dernier:
    premier=1
    dernier=2
    1 2 3 4 2 3 4 5
    3>2? oui! on change le dernier:
    premier=1
    dernier=3
    1 2 3 4 2 3 4 5
    4>3? oui! on change le dernier:
    premier=1
    dernier=4
    1 2 3 4 2 3 4 5
    2>4? NON! c'est la fin de ta séquence!
    premier=1
    dernier=4
    en effet, ta premiere séquence commence à 1, et se termine a 4.

    ensuite tu cherche la sequence suivante en posant que le nouveau premier est le nombre qui suit immédiatement le dernier, et le nouveau dernier idem.

    si ça ne te suffit pas d'avoir le premier et le dernier mais que tu veux toute la séquence, alors il faut définir de quelle façon tu la veux. si c'est une liste, p.ex, a chaque fois que tu as un OUI, avant de redéfinir "dernier", tu ajoutes dernier à ta liste.

  6. #6
    Membre confirmé Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Par défaut
    Oui, j'avais bien lu les solutions proposées qui effectivement répondent au problème.
    Mais je me suis mal exprimé lorsque j'ai parlé de "solution" car je parlais en fait de la solution (correction) que j'avais sur papier de cet exercice; comme ce n'est peut-être toujours pas très clair: j'avais cet exercice imprimé sur papier et la solution que je décris également sur papier.
    En tout cas, votre illustration m'a permis de mieux comprendre le mécanisme décris dans les deux précédents messages, merci.

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

Discussions similaires

  1. [débutant]Sous formulaires
    Par yorki dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2006, 14h42
  2. Gros débutant sous access...
    Par legillou dans le forum Access
    Réponses: 6
    Dernier message: 17/06/2005, 08h03
  3. [Débutante]Sous requete
    Par mimi74 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/07/2004, 14h02
  4. Réponses: 1
    Dernier message: 06/01/2003, 07h55

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