Я нашел похожие проблемы вокруг, но никто не рассматривал приоритет.Приоритет совпадений диапазонов дат
R : (------------|xxxxxxx|ooo|xx|----------------) (---)
S1: (------------) (----------------) (---)
S2: (xxxxxxxxxxxxxxx) (xxxxxx)
S3: (ooooooo) (oo)
Скажем, у меня есть 3 источника диапазонов дат, с именами S1, S2 и S3 с приоритетами 1,2 и 3 соответственно (1 самый высокий) и результат Р. Мне нужен результат, чтобы быть не -ограничение диапазонов дат, где приоритет имеет наивысший приоритет.
Я думал о решении, но он довольно последователен. Сначала я создать таблицу, упорядоченную по возрастанию даты, по убыванию приоритетов (в случае даты столкновений, наивысший приоритет идет первым в таблице) с их ID и действия (открытого или близкого расстояния):
ID | Action | Priority | Date |
--------------------------------
S1a | Open | 1 | 1 |
S2a | Open | 2 | 2 |
S1a | Close | 1 | 3 |
S3a | Open | 3 | 4 |
S2a | Close | 2 | 5 |
S2b | Open | 2 | 6 |
S3a | Close | 3 | 7 |
S1b | Open | 1 | 8 |
S2b | Close | 2 | 9 |
S3b | Open | 3 | 10 |
S3b | Close | 3 | 11 |
S1b | Close | 1 | 12 |
S1c...
Тогда я начинаю переборе эта таблица и заполнить упорядоченный список и таблицу результатов:
Так первая строка будет выглядеть так:
Order List: Result:
ID | Priority | ID | Action | Date |
S1a| 1 | S1a| Open | 1 |
Второй ряд, добавляет дату открытия S2a, но ничего не писать, потому что больше приоритета существует в стол:
Order List: Result:
ID | Priority | ID | Action | Date |
S1a| 1 | S1a| Open | 1 |
S2a| 2 |
Третья строка, закрывающая S1a, записывает дату закрытия, а так как S2a перемещается в верхнюю часть списка, она также записывает дату открытия для S2a.
Order List: Result:
ID | Priority | ID | Action | Date |
x S1a| 1 | S1a| Open | 1 |
S2a| 2 | S1a| Close | 3 |
S2a| Open | 3 |
Я думаю, вы можете увидеть, где это происходит ... Много перекрестную проверку и т.д., но в статье, кажется, работает. Я могу объяснить алгоритм немного лучше, если кому-то это нужно, но я не думаю, что это трудно понять. Если в упорядоченном списке есть более высокий приоритет, он ничего не пишет. При удалении более высокого приоритета снова открывается следующий самый большой.
Может быть, кто-нибудь с лучшей, более конкретной идеей?
Спасибо за ваше время!
Эй, спасибо, за ваш ответ. Да, я просто попросил альтернативы, потому что иногда вы так много входите в свое собственное решение, что перестаете думать по-другому, и я блуждал, если есть другой или известный способ приблизиться к этой проблеме. Я подумаю. Cheers :) –
Я ничего не встречал, но чтобы указать вам в правильном направлении то, что вы определяете, обычно называют проблемой «планирования». Поэтому поиск этого может помочь вам (вы не использовали эту терминологию нигде в вопросе, поэтому я предполагаю, что вы этого не знали). Большинство всего, что я нахожу, не имеет установленного правила, что длина событий может измениться, что дает вам совершенно уникальную проблему. – Don