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 :

Problème concernant des intervalles


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Problème concernant des intervalles
    Bonjour à tous,

    Je suis actuellement en train de chercher la solution à un exercice qui me pose pas mal de soucis. Je l'explique :

    En entrée, une liste d'intervalles représentant le temps de travail d'une personne (en secondes) est donnée. Le but est de donner en sortie le temps de présence maximum de cette personne. Voici un exemple :

    Le premier chiffre représente le nombre d'intervalles.

    6
    1 3
    7 15
    20 22
    2 5
    9 11
    12 18


    La personne est présente de la seconde 1 à la seconde 5, puis de la seconde 7 à la seconde 18, et finalement de la seconde 20 à la seconde 22, soit un total de 4 + 11 + 2 = 17 secondes.

    les conseils donnés pour l'exercice sont les suivants :

    Trier les segments par position de début croissante.
    Maintenir deux valeurs : d'une part le total en cours, et d'autre part la fin de segment la plus à droite déjà vue.


    J'ai créé une structure que j'ai ensuite triée par ordre croissant de début d'intervalles. Plusieurs solutions sont possibles mais j'ai du mal à les implémenter (les comprendre ?). Je précise que j'apprends l'algo en faisant du C++.

    La première :

    Lorsque je dessine les intervalles sur une feuille, je représente celles-ci sous forme d'escalier. Chaque intervalle sur une ligne différente. Je me dis que ça serait bien qu'il n'y ai plus qu'une seule ligne à la fin, donc, que je fusionne les intervalles qui font partie d'autres intervalles. Ensuite je parcourrais cette ligne, et dès que je vois un trou dans la ligne, cela signifie qu'il n'y a personne au poste, j'effectue ma soustraction puis je continue le traitement.

    La seconde :

    C'est une solution que j'ai trouvée en fouillant un peu sur le forum. J'ai demandé quelques précisions sur ce post mais vu son âge, il n'est pas impossible que personne ne l'ai vu. Il s'agit de ce post :
    http://www.developpez.net/forums/d43...AAKgAAAJSUAgA=

    je vais faire un copié/collé de la réponse fournie au posteur :

    "Le sweep consiste a mettre a jour un compteur en parcourant dans l'ordre chronologique toutes des dates. A chaque fois que tu tombes sur une date de "start" tu augmentes ton compteur de 1, et a chaque fois que tu tombes sur une date de "end" tu le décrementes de 1."


    J'ai représenté cette solution sur papier, ce qui donnerait (ligne du haut = intervalles ; ligne du bas = compteur

    Intervalles : 1 2 3 5 7 9 11 12 15 18 20 22
    Compteur: 1 2 1 0 1 2 1 2 1 0 1 0

    En suivant cette logique, dès que le compteur tombe à zéro, cela veut dire que l'on n'est dans aucune intervalle. J'aime bien cette solution, mais je me demande alors comment identifier les chiffres, de manière à ce que l'on sache s'il s'agit d'un début d'intervalle ou d'une fin. Ici aussi, j'avais pensé à faire une structure avec le chiffre en entier et la dénomination(e ou s) en caractère, mais je n'arrive pas à implémenter l'opérateur de tri pour utiliser la fonction sort() (je rappelle que je code en c++, même s'il s'agit d'un entrainement algorithmique).

    Donc voilà, il y a des idées, mais j'ai du mal à les implémenter. Un peu d'aide serait la bienvenue !


    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Personne ? :'(

  3. #3
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 234
    Points
    234
    Par défaut
    Bonjour,

    J'aime bien cette solution, mais je me demande alors comment identifier les chiffres, de manière à ce que l'on sache s'il s'agit d'un début d'intervalle ou d'une fin.
    Je pense que si tu mets ton compteur dans un simple tableau et en passant pas une comparaison entre t[i] et t[i-1] tu pourras déterminer ce que tu veux!! s'il est inférieur au précédant c que c'est une fin sinon début...

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

Discussions similaires

  1. Petit problème concernant des if
    Par mélii dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2013, 09h46
  2. Problème sur des intervalles
    Par jamibt dans le forum C
    Réponses: 2
    Dernier message: 11/05/2011, 23h23
  3. Problème concernant des évènements distant
    Par kisscool14 dans le forum C#
    Réponses: 2
    Dernier message: 25/05/2009, 07h47
  4. Resolution des problème concernant les dependances
    Par fethi_09dz dans le forum Ubuntu
    Réponses: 3
    Dernier message: 31/03/2009, 09h21
  5. Problème concernant la gestion des erreurs
    Par wmenant dans le forum VB.NET
    Réponses: 6
    Dernier message: 26/06/2008, 14h13

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