在已经满员的情况下安排一个约会的算法

Algorithm for Scheduling One Appointment in Already Full Schedule

我正在为一家管道公司构建一个日历安排应用程序。公司有一个或多个水管工,每个人都有全天不同时间的约会时间表。因此,乔什在 5 月 30 日的日程安排可能包括上午 10 点的 30 分钟约会、下午 1 点的 45 分钟约会和下午 3 点的一个小时的约会,而玛丽亚当天的日程安排完全不同。现在说一个客户想和这家公司预约,我的程序已经计算出这个新预约需要的时间。我希望我的程序 return 列出任何管道工的可能预约时间。这类问题有标准算法吗?

我更喜欢与语言无关的一般步骤,只是为了对可能处于类似情况但使用不同语言的任何人更有帮助,尽管我正在使用 PHP 和 PostgreSQL(如果有特定的)适合此的语言功能。

这是我目前尝试过的方法:

  1. 在请求的日期获取每个管道工的所有可用班次
  2. 获取当天已经完成的所有约会
  3. 做一种布尔减法来减少轮班中的约会,在每个管道工的日程安排中留下空隙
  4. 去掉所有小于请求预约长度的时间间隔(我也在这里计算开车时间,所以我知道预约之间需要相隔多远)
  5. Return 与客户之间的差距,根据预约时间缩短,作为预约的可能性

我了解到这种方法的问题在于它不明白如何处理比请求的约会大得多的间隔。如果您有上午 10 点到下午 6 点的空档,但您想要一个小时的约会,它只会建议上午 10 点到上午 11 点。这种方法也不允许一天中的时间选择。在同样的情况下,如果客户想要早上预约怎么办?那么它应该只建议10-11和11-12。或者,如果他们想要一个晚上的约会,它应该只建议下午 5-6 点。这种方法也不考虑两个管道工一起工作。如果我们假设两个工人 = 一半的时间,那么也许算法应该寻找 Josh 和 Maria 的时间表中相同的 30 分钟可用时间以及两个管道工时间表中的 60 分钟间隔。最后,感觉这个算法效率很低

顺便说一下,我在这里和 Internet 上查看了其他几个关于如何解决类似情况的问题,但我发现这些问题中的大多数(如果不是全部)都涉及优化计划。这对于该程序的其他部分可能很有价值,但现在,让我们假设现有的任命是固定的且不可更改的。我们只是希望将新的约会安排到现有的日程安排中。我知道这是可能的,因为像 Calendly 这样的应用程序具有相似的输入和输出。

简而言之,是否有更好的方法来实现这些目标:

提前致谢。

不需要任何复杂的算法。一天中只有少量可能的约会时间,比方说每 30 分钟左右一次。遍历所有可能的时间:06:00、06:30、07:00、... 20:00。每次检查它是否符合要求,该检查可以是 return 一个 yes/no 结果,也可以是一个数字,说明当时的匹配程度。您最终会得到一个可能的约会时间列表,选择最好的一个或所有时间。