Мне нужна помощь в реализации эффективного алгоритма для следующей задачи планирования.
Завтра в больницу придут n
пациенты для медицинского осмотра, но свободны только 2 врача (врач А и врач Б). Каждое медицинское обследование занимает 1 временной интервал для врача. Если возможно, мне нужно распределить этих n
пациентов по n
временным интервалам, используя только 1 врача. Если 1 врач невозможен, я могу назначить максимум 2 врача, так как доступны только 2 врача. Если 2 врачей все же недостаточно. Просто выведите impossible
Я принимаю доступность пациентов как исходную информацию. Например, есть 5 пациентов, пациент 1 доступен только для временного интервала 1, 2, 5, пациент 2 доступен для временного интервала 3, 4, пациент 3 доступен для временного интервала 1 и т. д. .
P1: 1 2 5
P2: 3 4
P3: 1
P4: 2
P5: 3 5
В этом случае мне нужен только 1 врач, чтобы сделать работу. выход
P1: Time slot 5 - Doc A
P2: Time slot 4 - Doc A
P3: Time slot 1 - Doc A
P4: Time slot 2 - Doc A
P5: Time slot 3 - Doc A
Если я получаю ввод, например:
P1: 1 2 5
P2: 3 4
P3: 2
P4: 2
P5: 3 5
Тогда мне нужно будет назначить обоих врачей, так как P3 и P4 имеют конфликты доступности. выход:
P1: Time slot 5 - Doc A
P2: Time slot 4 - Doc A
P3: Time slot 2 - Doc A
P4: Time slot 2 - Doc B
P5: Time slot 3 - Doc A
Какой самый эффективный алгоритм для такой задачи? Как я могу реализовать алгоритм Форда Фулкерсона для этого?
Что я сделал до сих пор.
Я пытался сохранить доступные временные интервалы каждого пациента в отдельных массивах.
Отсортируйте массивы по длине. Сначала назначьте пациента с наименьшим доступным временным интервалом.
После назначения пациента удалите этот временной интервал в остальных массивах и снова отсортируйте массивы по длине.
Повторяйте этот процесс, пока не будут назначены все пациенты.