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é! --