У меня есть некоторые данные вроде этого:
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 |---------------------------|
Итак, в данном примере 8-9
является критическим периодом, если используется вторая схема, потому что все точки активны. Как быстро и хорошо решить эту проблему в Python? Я думаю об использовании динамического программирования, но есть ли другие подходы, которые предлагаются?
Мой подход до сих пор:
Я больше думал с точки зрения реального времени. Итак, всякий раз, когда я получаю новую точку, я делаю следующее: Предположим, у меня уже есть 2-10
, и я получаю 3-15
, затем я выбираю максимум начала и минимум конца, поэтому в данном случае это 3-10
и увеличиваем счетчик этого интервала до 2. Затем появляется третья точка в 4-9
, выберите максимальное значение, равное 4, а минимальное - 9, и обновите значение 3-10
до 4-9
и обновите счет до 3. Теперь, когда приходит 8-14
, я выбираю начало этого интервала больше 4-9
, а конец этого интервала меньше 4-9
. В данном случае это неправда, поэтому я создам новую корзину 8-14
и поставлю счет на 1. Это не весь алгоритм, но он должен дать общее представление о том, кто я. делать здесь. Я посмотрю, смогу ли я набросать псевдокод.