Постановка задачиНазначения Алгоритм планирования (N люди с N свободно заняты слотами, ограничение неудовлетворение)
У нас есть один работодатель, который хочет взять интервью у N человека, и, следовательно, делает N слотов интервью. У каждого человека есть график свободных занятий для этих слотов. Дайте алгоритм, который планирует N людей в N слотов, если это возможно, и вернуть флаг/ошибку/etc, если это невозможно. Какова максимальная сложность выполнения?
Мои подходы до сих пор
Наивный: есть N! способы запланировать N людей. Пройдите через все из них, для каждой перестановки, проверьте, возможно ли это. O (п!)
Откат:
- Посмотрите на любые временные интервалы интервью, которые могут иметь только 1 человек. Запланируйте человека, удалите его из списка кандидатов и удалите слот.
- Ищите кандидатов, которые могут войти только в 1 слот. Запланируйте человека, удалите его из списка кандидатов и удалите слот.
- Повторите 1 & 2 пока таких комбинаций больше нет.
- Выберите человека, спланируйте их случайным образом в один из их доступных слотов. Помните эту операцию.
- Повторяйте 1, 2, 3, пока у нас не будет графика или не будет неразрешимого конфликта. Если у нас есть график, верните его. Если есть неразрешимый конфликт, откат.
Это наихудший случай O (n!), Я думаю - это не лучше.
Возможно, существует D.P. решение, но я еще не вижу его.
Другие мысли
Проблема может быть представлена в матрице NxN, где строки являются «слоты», столбцы «люди», а значения «1» бесплатно и «0» для занятый. Затем мы ищем матрицу идентичности с разбивкой по столбцу в этой матрице. Шаги 1 & 2 ищут строку или столбец только с одним «1». (Если ранг матрицы равен N, то это означает, что существует решение, но противоположное не выполняется). Еще один способ взглянуть на это - рассматривать матрицу как матрицу рельефа направленного графа без взвешивания. Затем каждый из узлов представляет 1 кандидата и 1 слот. Затем мы ищем набор ребер, так что каждый узел в графе имеет один исходящий край и один входящий ребро. Или, с 2x узлами, это будет двудольный граф.
Пример матрицы:
1 1 1 1
0 1 1 0
1 0 0 1
1 0 0 1
Это не детерминированной задачи, которая не имеет решения в полиномиальное время. Вы можете попробовать жадный алгоритм, но он не вычисляет всю комбинацию. – Ankit