У меня есть несколько таких данных:
1: 2 - 10
2: 3 - 15
3: 4 - 9
4: 8 - 14
5: 7 - 13
6: 5 - 10
7: 11 - 15
Я попытаюсь представить представление, чтобы сделать его более ясным:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 |--------------------------------------X---------|
2 |--------------------------------X--------------------------------------------|
3 |--------------------------X---|
4 |-X-------------------------------------|
5 |--------X------------------------------|
6 |--------------------X----------|
7 |---------------------------|
Итак, в примере case 8-9
является критическим периодом, если используется вторая схема, потому что все точки активны. Что такое быстрый и эффективный способ решения этой проблемы в python? Я думаю об использовании динамического программирования, но есть ли другие подходы, которые предлагаются?
Мой подход до сих пор:
Я думал больше с точки зрения реального времени. Итак, всякий раз, когда я получаю новый момент, я делаю это: предположим, что я уже получил 2-10
, и я получаю 3-15
, тогда я выбираю max start и min of end, поэтому этот случай равен 3-10
и увеличивает этот интервал до 2. Затем третья точка приходит в 4-9
, выбирает max, которая равна 4, а min равно 9 и обновляет значение 3-10
до 4-9
и обновляет счет до 3. Теперь, когда приходит 8-14
, я выбрать начало этого интервала больше, чем 4-9
, а конец этого интервала меньше 4-9
. В этом случае это неверно, поэтому я создам новое ведро 8-14
, и я ставлю счет на 1. Это не весь алгоритм, но должен дать представление высокого уровня о том, что я здесь делаю. Я увижу, могу ли я набросать псевдокод.