我正在为一家管道公司建立一个日历调度应用程序。该公司有一个或多个水管工,他们每个人都有一个全天不同时间的预约时间表。所以Josh在5月30日的日程安排可能包括上午10点30分钟的预约,下午1点45分钟的预约,以及下午3点一个小时的预约,而Maria当天的日程安排则完全不同。现在假设一个客户想向这家公司预约,而我的程序已经计算出了这个新的预约所需的时间。我希望我的程序能够返回一个列表,列出任何水管工可能的预约时间。这种类型的问题有标准算法吗?
我更喜欢语言无关的、通用的步骤,只是为了对使用不同语言可能遇到类似情况的人更有帮助,尽管我使用的是PHP和PostgreSQL,如果有适合这个问题的特定语言特性的话。
以下是我目前尝试过的方法。
我了解到,这种方法的问题在于,它不明白如何处理比要求的预约时间大得多的空隙。如果你有一个从上午10点到下午6点的空档,但你想要一个小时的预约,它只会建议上午10点到11点。这种方法也不允许选择时间日期。在同样的场景下,如果客户想预约上午的时间呢?那么它应该只建议10-11和11-12。或者如果他们想预约晚上的时间,那么应该只建议下午5-6点。这种方法也没有考虑两个水电工一起工作的情况。如果我们假设两个工人=一半的时间,那么也许算法应该在Josh和Maria的日程表中寻找同样的30分钟可用时间,同时在任一水管工的日程表中寻找60分钟的空隙。最后,这个算法感觉效率很低。
顺便说一下,我在这里和互联网上看了其他几个关于如何解决类似情况的问题,但我发现这些问题中的大多数(如果不是全部)都涉及到优化时间表。这对这个程序的其他部分可能是有价值的,但现在,让我们假设现有的约会是固定的和不可改变的。我们只是想把一个新的约会适合于现有的时间表。我知道这是可能的,因为像Calendly这样的应用程序有类似的输入和输出。
简而言之,有没有更好的方法来实现这些目标。
先谢谢你。
没有必要使用任何复杂的算法。一天中只有少量可能的预约时间,比方说每30分钟左右一次。迭代所有可能的时间。06:00, 06:30, 07:00, ... 20:00. 检查每一次是否符合要求,检查的结果可以是yesno,也可以是一个数字,表示该时间的匹配度。你最终会得到一个可能的预约时间列表,选择一个最好的或者全部的时间。