Алгоритм нахождения середины наибольшего свободного временного интервала в периоде?
Скажем, я хочу запланировать сбор событий на период 00: 00 & # x2013; 00: 59. Я планирую их на полных минут (00:01, никогда 00:01:30).
Я хочу расположить их как можно дальше друг от друга в течение этого периода, но я заранее не знаю, сколько событий у меня будет в общей сложности за этот час. Я могу запланировать одно мероприятие сегодня, потом еще два завтра.
У меня в голове очевидный алгоритм, и я могу придумать, как его реализовать, но уверен, кто-то знает более хороший способ. Я бы предпочел Ruby или что-то, что я могу перевести на Ruby, но я возьму то, что смогу получить.
Итак, алгоритм, который я могу придумать в своей голове:
Событие 1 заканчивается в 00:00.
Событие 2 заканчивается в 00:30, потому что это время является самым дальним из существующих событий.
Событие 3 может закончиться в 00:15 или 00:45. Так что, возможно, я просто выберу первый, 00:15.
Событие 4 заканчивается в 00:45.
Событие 5 заканчивается где-то около 00:08 (округлено с 00:07:30).
И так далее.
Таким образом, мы могли бы посмотреть на каждую пару взятых минут (скажем, 00: 00 & # x2013; 00: 15, 00: 15 & # x2013; 00: 30, 00: 30 & # x2013; 00: 00), выбрать самый большой диапазон (00 : 30 & # x2013; 00: 00), разделите его на два и округлите.
Но я уверен, что это можно сделать намного приятнее. Делитесь!