Задача на оптимальное расположение событий

Задача оптимального расположения событий решается каждый раз когда вы заходите в свой Google Calendar и смотрите на одновременные события (events). С математической точки зрения это задача упорядочивания множества событий таким образом, что для каждого события существует параметр left (глубина) и width (ширина).

1
2 3
4
1

 

В действительности Google немного искажает ширину событий, что-бы человеку было ещё удобней видеть что внутри, но суть вы можете увидеть в таблице выше, где 5 событий размещаются внутри одного дня. Глубина должна с одной стороны зависеть от времени когда событие начинается, с другой стороны если события (зелёное и серое) начинаются в одно и то же время, то надо уже исходить из взаимных расположений последующих событий (что-бы пурпурное событие получило максимальную ширину)

Как бы вы решали такую задачу, если у вас есть массив событий с их временами (начало и конец)? Чуть позже предоставлю свое решение..

RSS