Вы должны сгенерировать все возможности и выбрать лучший.
Это NP-полная проблема, поэтому нет способа сделать это и быстро, и правильно - либо вы делаете это быстро с помощью некоторой эвристики, но тогда вы не знаете, действительно ли это было лучше, или вы делаете это медленно, и я имею в виду медленно, но вы уверены, что результат является оптимальным.
Зависит от размера ваших данных.
EDIT:
Пример, демонстрирующий, что просто присвоение событий первому свободному каналу не всегда будет работать.
У нас есть 3 канала:
Ч1, Ч2, Ч3
Мы должны разместить 6 событий:
E1-2 - starts at 1:00 ends at 2:59
E1-3 - starts at 1:00 ends at 3:59
E1-3 - starts at 1:00 ends at 3:59
E4 - starts at 4:00 ends at 4:59
E4 - starts at 4:00 ends at 4:59
E3-4 - starts at 3:00 ends at 4:59
Если вы просто назначите первое свободное место, вы получите:
Ch1: E1-2, E4
Ch2: E1-3, E4
Ch3: E1-3
and no place for E3-4
Если вы назначили их в другом порядке, вы получите
Ch1: E1-2, E3-4
Ch2: E1-3, E4
Ch3: E1-3, E4
И все события подойдут.
Так что вы должны каким-то образом выполнить возврат.