Как найти доступное время в рабочем графике, используя биты? - PullRequest
0 голосов
/ 02 февраля 2012

В отношении ответа, уже даного на другой вопрос:

https://stackoverflow.com/a/1609686/1183608

Я работаю с этим ответом, однако меня смущает смысл вычисления массива accept_times. Я хочу выяснить, в какое время дня (расписание) доступно для определенной продолжительности временного интервала, но функция для выполнения этого в приведенном выше ответе, кажется, не удовлетворяет этому, если я что-то пропустил.

1 Ответ

1 голос
/ 02 февраля 2012

grioja, ответ, на который вы ссылаетесь, дает вам время суток, доступное для желаемой длины слота.Время занятости / доступности представлено битами, например:

1100001110

(Это будет 30 доступных минут, затем 60 минут занятости, затем 45 доступных, а затем 15 занятых.) Затем вы получите двоичное число, которое представляет длину доступного временного интервала, который вы хотите найти, скажем:

111

(Это означает, что вы хотите найти интервал из 45 доступных минут.) Затем вы пытаетесь сместить 2 числа друг против друга:

11000011100000000111

11000011100000001110

11000011100000011100

... и так далее, для каждой возможной относительной длины смещения.Операция «И», которую он показывает в этом ответе, определяет, совпадают ли 1 в номере «желаемой длины слота» со всеми 1 в номере «доступных времен».Если это так, вы нашли приемлемое время.

Кстати, вы могли бы сделать то же самое другими способами.Например, вы можете представлять занятое / доступное время символами в строке и использовать регулярное выражение, чтобы найти доступный слот желаемой длины.

Обратите внимание, что это общий подход (который в основном представляет собой просто «линейный поиск»") не будет масштабироваться, если список доступных / занятых временных интервалов очень длинный.Есть и другие подходы, которые в этом случае будут намного быстрее.

...