Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在日历中安排给定频率事件的最佳方式_Javascript_Typescript_Algorithm_Scheduling - Fatal编程技术网

Javascript 在日历中安排给定频率事件的最佳方式

Javascript 在日历中安排给定频率事件的最佳方式,javascript,typescript,algorithm,scheduling,Javascript,Typescript,Algorithm,Scheduling,在过去的几天里,我一直在想,创建一个算法的最佳方法是什么,该算法将采用我的事件数组,并确定它在计划中的最佳位置 到目前为止,创建了以下类型: export type TaskEvent = { frequency: number; score: number; key: string } export type ScheduleDay = { events: TaskEvent[], score: number day: number } export type Sc

在过去的几天里,我一直在想,创建一个算法的最佳方法是什么,该算法将采用我的事件数组,并确定它在计划中的最佳位置

到目前为止,创建了以下类型:

export type TaskEvent = {
  frequency: number;
  score: number;
  key: string
}

export type ScheduleDay = {
  events: TaskEvent[],
  score: number
  day: number
}

export type Schedule = ScheduleDay[]

其中,
TaskEvent.frequency
是一个值,该值定义了将其放置在计划中的频率,
TaskEvent.score
是给定事件的难度

假设schedule是一个ScheduleDays数组,我需要获取从数据库接收到的任务列表,并根据这些任务制定时间表。 任务没有持续时间。它只需要放在时间表内

负责创建计划的代码:

const createSchedule = (size: number): ScheduleDay[] => 
  new Array(size).fill(
    { 
      events: [], 
      get score() {
        return this.events.reduce((acc, event) => acc + event.score, 0)
      } 
    }
  ).map((day, idx) => ({...day, day: idx}))
我试图实现的是在计划中找到事件的最佳位置,它可能是空的(第一次迭代)或已经被部分事件填充

例如: 有3项任务:

  • 频率为1,得分为2
  • 频率为3分,得分为5分
  • 频率为7分,得分为10分
这意味着第一个任务应该每天出现。在完成第一项任务后,每天的计划得分等于2

第二项任务需要每3天安排一次,所以从现在开始,安排这项任务的天数将是5天,以此类推

有许多不同分数和频率的任务。从日程安排的第一天开始,所有这些都会以不平衡的天数结束,这将有70分,而另一天将有30分左右

ScheduleDay.score
是一个getter函数,用于获取当天的得分总和

我实际上想到的是:

  • 创建计划
  • 创建任务序列(假设任务的频率为2。这意味着它应该在14天的计划中每隔一天放置一次)
  • 查找包含可能分配的索引(天数)的数组
  • 比较结果可能性的分数
  • 将事件放入计划中,迭代
  • 有没有更好的方法或算法来实现调度


    我想选择一个开始的日子,这样那天的总分将尽可能接近其他日子所有分数的平均值。

    感觉太抽象了,这是一个实际问题还是家庭作业? 它可以被看作是操作系统的任务调度器。 你尝过这些吗


    所以频率不是真正的频率,而是一个周期,它的单位是“天”。TaskEvent是1h?然后事件包含最多24小时的TaskEvent?还是有其他限制?因为现在它不需要任何算法,因为您可以将所有taskevents放入ScheduleDay中。如果存在大小限制,是否存在遗漏事件的逻辑?错过的事件应尽快完成,即使不是正确的一天或在下一个周期?频率或周期,如您所述,单位为一天。例如,有以下条目:-每2天重置所有设备-每7天清理设备存储,依此类推。。。需要解决的问题是在计划内分配所有任务,并在分数上保持平衡,这样就不会出现超负荷工作日。间隔何时开始并不重要,重要的是任务将在频率周期中定义的次数。如果计划周期为14天,则应显示14/频率|周期次数。任务没有任何持续时间。看起来有人对您的问题投了否决票,我建议您对其进行编辑,重新措辞,并尽可能多地添加细节和限制条件,“分数平衡”是什么意思,以及“超员天数”是什么?看起来你知道很多细节但我们对问题一无所知,您需要指定这些,因为猜测和推断您的意思可能会导致一个与您的意思完全不同的问题的解决方案。您希望以这样的方式选择某个开始日期,即当天的总分将尽可能接近所有其他日期的平均分?这是一个实际问题。我是一名前端开发人员,正在学习一些后端的东西:这些链接描述了比我更复杂的问题。我不考虑开始和结束时间。只有一天是重要的。