2016-12-26 2 views
0

У меня есть следующие временные интервалы в течение одного дня:Четкие временные интервалы от нескольких пересекающихся интервалов

1) 9:00 до 13:00

2) 9:30 до 10:30

3) с 9:30 до 10:30 (этот интервал преднамеренно здесь 2x)

4) с 11:00 до 12:00

можно визуализировать временные интервалы на горизонтальной линии времени:

Timeslot 1)

|--------------------------------------------| 

9:00          13:00 

Timeslot 2)

 |-------------| 

     9:30  10:30 

Timeslot 3)

 |-------------| 

     9:30  10:30 

Timeslot 4)

      |-------------| 

          11:00  12:00 

Я пытаюсь выяснить метод Python, который будет принимать N количество временных интервалов на входе и возвращать отдельные временные окна плюс сколько раз окно перекрывает другое. Для приведенного выше примера, ожидаемый результат должен выглядеть следующим образом:

Окно 1: 9:00 - 9:30, кол-слоты 1

Окно 2: 9:30 - 10:30, кол-слотов 3

окно 3: 10:30 - 11:00, слоты рассчитывать 1

окно 4: 11:00 - 12:00, кол-слотов 2

окно 5: 12:00 - 13:00, Количество слотов 1

Возможно ли любое ne, пожалуйста, укажите мне в правильном направлении, как это решить в Python 3?

+0

Подсказка: (1) интервалы сортировки по времени начала; (2) для каждого интервала, если он пересекает с ним следующий интервал, объединять их и подсчитывать слияния. – 9000

ответ

0

Используйте возможности в sympy sets: intervals, чтобы сделать интервал более удобным. Это первая часть.

Вычислить рекурсивно. Начните с любого из заданных интервалов, начните с него как «первое пересечение» и перейдите «вниз» на один шаг. Выберите другой интервал и вычислите пересечение с ним предыдущего пересечения. Если это пересечение непустое, перейдите к другому шагу. В противном случае вернитесь к вершине с этим пересечением как значение пересечений рассматриваемых интервалов. Аналогично, если пройденное пересечение пусто, вернитесь туда и вернитесь оттуда. Начните с каждого из заданных интервалов.