Нашел этот вопрос в блоге интервью. Данный свободный график в форме (a - b) i.e., from 'a' to 'b'
из n
человек, распечатать все интервалы, где есть все n
участников. Это похоже на приложение календаря, предлагающее возможные тайминги встреч.Алгоритм для поиска временных интервалов встреч, где все участники доступны
Example:
Person1: (4 - 16), (18 - 25)
Person2: (2 - 14), (17 - 24)
Person3: (6 - 8), (12 - 20)
Person4: (10 - 22)
Time interval when all are available: (12 - 14), (18 - 20).
Пожалуйста, поделитесь любым известным оптимальным алгоритмом для решения этой проблемы.
Я думаю о следующем решении.
Редактировать:
currentList
из интервалов, которые содержат один интервал времени с каждого человека. ПервоначальноcurrentList = [4-16, 2-14, 6-8, 10-22]
.Посмотрите на
max_start
иmin_end
вcurrentList
и выходе(max_start, min_end)
еслиmax_start < min_end
; Обновите все интервалы вcurrentList
, чтобы иметьstart
значение какmin_end
. Удалите интервал, который имеетmin_end
отcurrentList
и добавьте следующую запись в список этого лица вcurrentList
.Если
max_start >= min_end
в предыдущем шаге, обновить все интервалы вcurrentList
иметьstart
значение какmax_start
. Если для любого интервалаi
,end > start
, замените этот интервал наcurrentList
со следующим интервалом соответствующего лица.
Исходя из вышеизложенной идеи, она будет работать, как показано ниже для данного примера:
currentList = [4-16, 2-14, 6-8, 10-22] max_start=10 >= min_end=8
update start values to be 10 and replace 6-8 with next entry 12-20.
currentList = [10-16, 10-14, 12-20, 10-22] max_start=12 <= min_end=14
add max_start-min_end to output and update start values to 14. Output=[12-14]
currentList = [14-16, 17-24, 14-20, 14-22] max_start=17 >= min_end=16
update start values to be 17 and replace 14-16 with 18-25
currentList = [18-25, 17-24, 17-20, 17-22] max_start=18 <= min_end=20
add max_start-min_end to output and update start values to 20. Output=[12-14, 18-20]
currentList = [20-25, 2-24, - , 2-22]
Terminate now since there are no more entry from person 3.
Я не выполнил выше, хотя. Я думаю о минимальной куче и максимальной куче, чтобы получить минимальную и максимальную значения в любой момент. Но меня беспокоит обновление начальных значений, потому что обновление кучи может стать дорогостоящим.
Это спорный вопрос; 25 не является допустимым временем –
@ Bern, ища оптимальное решение. Не хотел заявлять очевидное :) – sachin2182
@ CalleBergström Время как в не настенные часы. Это просто представление. – sachin2182