rendez-vous sur une distribution plage de dates
Question
Je suis en train de générer des données de test.
Dire que j'ai 1000 rendez-vous que je dois allouer sur une plage de dates.
Maintenant, je dois distribuer ces nominations telles qu'il ya deux fois plus de rendez-vous par jour à la fin du mois car il y a au début du mois. L'augmentation des nominations doit augmenter avec une vitesse constante.
Ainsi, par exemple, s'il y a 5 rendez-vous le 1er jour du mois, à la fin du mois, nous allons recevoir 10 rendez-vous par jour.
Un rendez-vous ne peut se produire un jour de semaine.
Y at-il un algorithme décent qui me permettrait de distribuer ces dates de cette façon?
Modifier
Ceci est le meilleur que je suis à ce jour, inspiré par la solution Henriks:
private int GetNumForCurrentDate (DateTime date)
{
int daysInMonth = DateTime.DaysInMonth ( date.Year, date.Month );
// x is the number of appointments on the first day
double firstDay = this._NumPerMonth / ( ( ( ratio + 1 ) / 2 ) * daysInMonth );
// x * ratio is the number of appointments on the last day.
double lastDay = firstDay * ratio;
// Interpolate a value between the first and last days
double exactNumOnThisDay = firstDay + ( lastDay - firstDay ) * ( (double)date.Day / (double)daysInMonth );
int numOnThisDay = Convert.ToInt32 ( Math.Truncate ( exactNumOnThisDay ) );
// Accumulate any overflow
this._Overflow += exactNumOnThisDay - numOnThisDay;
if ( this._Overflow > 1 )
{
// Shove the overflow into our number when it gets into whole number teritory
numOnThisDay++;
this._Overflow--;
}
return numOnThisDay;
}
Il retourne le nombre de jours d'allouer un jour particulier donné la date. Il traite de séparer les montants alloués à chaque mois et gère trop-plein d'arrondi, mais son pas tout à fait parfait, il court de jours d'affecter le dernier jour, mais il est assez bon pour l'instant et Ive manquer de temps pour perfectionner. .
La solution
x rendez-vous sur le premier jour, 2x le dernier jour, donc 1,5x en moyenne. Lorsqu'il y a des jours de la semaine y, x est égal à 1000 / (1.5y). Ainsi, 667 / y le premier jour, 1333 / y le dernier, interpoler les jours entre