Visualização de eventos do calendário. Algoritmo para organizar eventos com largura máxima

Preciso de sua ajuda com um algoritmo (ele será desenvolvido no lado do cliente com javascript, mas não importa, estou principalmente interessado no algoritmo em si) que estabelece eventos de calendário para que cada caixa de evento tenha largura máxima. Por favor, veja a seguinte imagem:

Eixo Y é o tempo. Portanto, se "Evento de teste" iniciar ao meio-dia (por exemplo) e nada mais cruzar com ele, ele terá toda a largura de 100%. "Revisão semanal" intersecta com "Tumbling YMCA" e "Anna / Amelia", mas os dois últimos não estão em interseção, então todos eles preenchem 50%. Test3, Test4 e Test5 estão se interceptando, então a largura máxima é 33,3% para cada. Mas o Test7 é 66% desde que o Test3 é 33% fixo (veja acima), então ele ocupa todo o espaço disponível, que é de 66%.

Eu preciso de um algoritmo como definir isso.

desde já, obrigado