【发布时间】:2019-02-28 03:19:45
【问题描述】:
假设您有不同的作业需要定期运行(例如,您想要对不同的端点进行 API 调用)。 假设您需要访问两个不同的端点,并且您希望您的呼叫在时间上尽可能远离对方。
示例:您有两个作业,一个每分钟运行一次,另一个每分钟运行两次。
解决方案:以 60 秒的间隔启动作业 A,等待 15 秒,以 30 秒的间隔启动作业 B。 这样,作业将在几秒钟内运行:0(作业 A)、15(作业 B)、45(作业 B)、60(作业 A)、75(作业 B)、105(作业 B)、120(作业 A) , ... 将 API 调用之间的最大间隔设为 15 秒,同时保持我们需要的调用频率。
对于这些情况,您能否想出一种算法来为每个作业提供最佳开始时间,从而最大化调用之间的最小时间差?理想情况下,该算法可以处理两个以上的工作。
假设我们不需要等待作业完成再次运行它。
谢谢
【问题讨论】:
-
互素数区间(例如 5 和 7)怎么办?
-
是否也有可能无法安排? - 听起来与重新排列单词中的字母类似,因此它们相距 k 距离。是否给出了需要安排作业的时间间隔?像一个小时2小时左右?
-
@MBo 每个作业的开始时间可以是浮点数(例如,以毫秒为单位)。每种情况可能都没有完美的解决方案。如果作业将在某个解决方案中同时运行,并且该解决方案是我们能做的最好的解决方案,则应使用该解决方案。
-
@SamerTufail - 作业需要无限期地运行
-
规律性有多重要?例如,如果 A 在时间 0 运行而 B 在时间 20 和 40 秒运行,那么在你的情况下会有多糟糕。 平均 A 每分钟运行一次,B 每 30 秒运行一次。但实际上 B 以 20 秒和 40 秒的间隔运行。
标签: algorithm intervals jobs job-scheduling