Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1276 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Nombre de taches simultanées

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Nombre de taches simultanées

n°1739321
cybertom87
Posté le 30-05-2008 à 11:27:34  profilanswer
 

Bonjour,
 
Imaginons un "calendrier" contenant un ensemble de tâches pouvant s'étaler sur un certain temps, plusieurs tâches peuvent se chevaucher.
Je souhaite trouver un algorithme (certainement implémenté par la suite en vbs) qui puisse me donner le nombre maximum de tâches simultanées ayant eu lieu pendant une période donnée.
 
Données :
Fichier texte avec séparations par tabulation, chaque ligne représente une tâche et contient 2 champs : date_de_début et date_de_fin
Les lignes sont dans l'ordre chronologique des date_de_début.
 
Sortie
Fichier texte à une seule colonne, composé d'autant de lignes/tâches que le fichier source.  
Chaque ligne indique le nombre maximum de tâches simultanées ayant eu lieu durant la tâche de la même ligne du fichier source.
 
Exemple visuel:

Code :
  1. T1 -----
  2. T2   ------
  3. T3       -------
  4. T4       ---


Fichier source :

Code :
  1. 1   5
  2. 3   8
  3. 7   13
  4. 7   9


Fichier sortie :

Code :
  1. 2
  2. 3
  3. 3
  4. 3


 
Voila ...

mood
Publicité
Posté le 30-05-2008 à 11:27:34  profilanswer
 

n°1739325
Joel F
Real men use unique_ptr
Posté le 30-05-2008 à 11:38:11  profilanswer
 

en gros un diagramme de Gant , non ?

n°1739696
cybertom87
Posté le 31-05-2008 à 15:35:59  profilanswer
 

Joel F a écrit :

en gros un diagramme de Gant , non ?


Ce n'est pas le but de mon algo, mais en quelque sorte ça y ressemble.
Je veux seulement savoir dans un période donnée (du 1er Juin au 1er Juillet par exemple), combien il y a eu de tâches simultanées au maximum (ne serait-ce que pendant une seconde).

n°1739838
gilou
Modérateur
Modzilla
Posté le 01-06-2008 à 11:19:46  profilanswer
 

Tu fabriques un ensemble ordonné de couple de valeurs (date, entier).
L'ordre est donné par le champ date d'un couple.
Au départ, cet ensemble est vide.
Tu parcours tes données.  
Pour chaque date (debut ou fin) D:
Si ton ensemble contient déja un couple de la forme (D, n) alors
  Si D est une date de début, tu remplaces (D, n) par (D, n+1)
  Si D est une date de fin, tu remplaces (D, n) par (D, n-1)
Si ton ensemble ne contient pas de couple de la forme (D, n) alors
  Si D est une date de début, tu insères (D, 1) dans ton ensemble, en respectant l'ordre
  Si D est une date de fin, tu insères (D, -1) dans ton ensemble, en respectant l'ordre
(Fin de la premiere phase)
Une fois que c'est fait, tu initialise un entier N a 0
Tu parcours ton ensemble de couples dans l'ordre.
Pour chaque couple (d, n) rencontré
  tu remplaces (d, n) par (d, N+n)
  N = N+n
(Fin de la seconde phase et donc de l'initialisation de la structure de données)
Notes qu'une fois cette phase terminée, tu dois avoir N == 0, sinon, il y a une erreur qque part.
A ce stade, la suite des dates des couples est la suite des dates auxquelles le nb de taches change, et pour un couple (d,n), n est le nombre de taches a partir de la date d, jusqu'a la date suivante.
 
Pour déterminer le nombre maximal de taches entre les dates ddeb, dfin, il suffit de proceder ainsi:
Initialiser un entier tmax a 0
parcourir l'ensemble des couples (d, n), dans l'ordre.
  si d >= dfin fin du parcours de l'ensemble (ou d > dfin, ca dépend de comment tu considere ton pb)
  si  d < ddeb passer au couple suivant
  si n > tmax tmax = n et passer au couple suivant
A la fin de ce parcours, tmax contient le nombre maximal de taches entre les dates ddeb, dfin.
 
On peut optimiser ce qui est décrit précedemment, je ne l'ai pas fait pour que ce soit plus compréhensible.
A+,


Message édité par gilou le 01-06-2008 à 11:31:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1739868
bjone
Insert booze to continue
Posté le 01-06-2008 à 14:44:49  profilanswer
 

c'est pas plus simple d'avoir une collection des tâches (début,fin) triée par le début et pour chaque tâche tu comptes le nombre de tâches suivantes qui commence avant ou à la fin ?  

n°1739871
gilou
Modérateur
Modzilla
Posté le 01-06-2008 à 15:03:58  profilanswer
 

Citation :

qui commence avant ou à la fin

déja la ce que tu veux dire n'est pas clair.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1739882
bjone
Insert booze to continue
Posté le 01-06-2008 à 15:27:24  profilanswer
 

gilou a écrit :

Citation :

qui commence avant ou à la fin

déja la ce que tu veux dire n'est pas clair.
A+,


 
suivant.debut <= courant.fin
 
"pas clair" semble être une définition qui doit être différente entre nous deux :D

Message cité 1 fois
Message édité par bjone le 01-06-2008 à 15:28:18
n°1739892
gilou
Modérateur
Modzilla
Posté le 01-06-2008 à 16:37:05  profilanswer
 

bjone a écrit :


 
suivant.debut <= courant.fin
 
"pas clair" semble être une définition qui doit être différente entre nous deux :D


Ca collera pas pour donner le nombre max, ce que tu proposes a priori (ou alors il faut que tu indiques ta maniere de calculer ce nb max).
En particulier a cause des taches telles que suivant.debut <= courant.fin et suivant.fin <= courant.fin et sur des plages de temps disjointes.
A+,


Message édité par gilou le 01-06-2008 à 16:37:36

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1739927
bjone
Insert booze to continue
Posté le 01-06-2008 à 19:46:12  profilanswer
 

y'avais effectivement le cas de recouvrement avec une tache précédent qui pouvais chier, mais à priori avec:
pour chaque tâche: date début, date fin, compteur  recouvrement (initialisé à 1)
 
les tâches dans une collection ordonnée par date de début
pour chaque tâche "courante"
    pour chaque tâche "suivante" dont la date de début <= tâche "courante".date de fin
         incrémenter compteur de la tâche "courante"
         incrémenter compteur de la tâche "suivante"
 
si je me plante pas, tous les types de recouvrements devraient passer.


Message édité par bjone le 01-06-2008 à 19:48:11
n°1739962
cybertom87
Posté le 01-06-2008 à 21:47:00  profilanswer
 

Merci beaucoup gilou, ton idée me semble très bonne :)

 

bjone, tu ne sembles pas utiliser ton "compteur de revouvrement".
J'avais pensé à ton idée initialement, mais ça ne marche pas, comme le précise gilou, si tu as plusieurs taches consécutives pendant une plus longue par exemple :

 

------
 --
     --
Ton algo donnerait 3 tâches simultanées pour la 1ère tâche, alors qu'il y en a au maximum que 2 simultanées.


Message édité par cybertom87 le 01-06-2008 à 21:47:45
mood
Publicité
Posté le 01-06-2008 à 21:47:00  profilanswer
 

n°1739986
bjone
Insert booze to continue
Posté le 01-06-2008 à 23:29:03  profilanswer
 

exact :jap: autant pour moi


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Nombre de taches simultanées

 

Sujets relatifs
Probleme Boucle "pour" en nombre variablecherche a decodé MD5 sachant le nombre de caractere a trouver ?
creer un grand nombre d'objetsPerl :comment forcer une variable sur un certain nombre de caractères?
Compter le nombre de feuillescompter le nombre de différences de deux fichiers (diff...)
Ajouter un nombre dans tous les champsutilisation de nombre entier tres grand!
JAVA Ne pas afficher le E sur les nombres dit scientificRécupérer le nombre de caractère d'un texte ?
Plus de sujets relatifs à : Nombre de taches simultanées


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR