Optimizing date calculations
I wrote a naive little algorithm to calculate the end date of a scheduled event.
There are the following restraints:
- Total number of hours
- Number of hours per day
- Workdays per week
- Skip holidays
So, the pseudo-code looks like this:
While there are hours
If it's a workday
diminish the hour counter by the amount of hours per day
Go to the next day
This works, but it's slow. Let's do this moar better!
New pseudo-code:
Hours / Hours per day ===> Days
Days / Workdays per week ===> Weeks
(7 - workdays per week) * Weeks ===> More Days
Add the number of days to the initial date to get the end date.
Calculate the number of holidays in the range ===> Days
While there are days
If it's a workday
diminish the day counter by one
Move the end date on day forward.
This improved algorithm is 150 times faster than the original for 630 hours, 5 hours per day (or 126 days)
Comments
Post a Comment