设计一下问题的算法:A simple scheduling problem. We are given jobs j1, j2… jn, all with known running times t1, t2… tn, respectively. We have a single processor. What is the best way to schedule these jobs in order to minimize the average completion time. Assume that it is a nonpreemptive scheduling: once a job is started, it must run to completion. The following is an instance. a) (j1, j2, j3, j4) : (15,8,3,10)
时间: 2024-04-01 18:35:44 浏览: 95
这是一个经典的调度问题,可以使用贪心算法来解决。具体步骤如下:
1. 将作业按照运行时间从小到大排序。
2. 依次将作业加入到处理器中执行,每次选取运行时间最短的作业。
3. 记录每个作业的完成时间,并计算平均完成时间。
具体实现时,可以使用一个列表来记录作业的完成时间,初始值为0,表示所有作业都还没有开始执行。然后按照步骤1和步骤2依次执行作业,更新每个作业的完成时间。最后计算平均完成时间即可。
对于给定的实例 (j1, j2, j3, j4) : (15,8,3,10),按照上述算法的步骤,得到的作业执行顺序为 j3、j2、j4、j1,对应的完成时间依次为 3、11、21、36,平均完成时间为 (3+11+21+36)/4=17.75。
相关问题
java.lang.illegalargumentexception:org.springframework.scheduling.concurrent.threadpooltaskexecutor
这个错误通常是因为 Spring 框架的 ThreadPoolTaskExecutor 配置不正确导致的。可能是线程池大小设置不当,或者线程池已满,无法继续执行任务。建议检查一下 ThreadPoolTaskExecutor 的配置,确保线程池大小合理,并且尽量不要让任务等待太久。如果问题仍然存在,可以考虑增加线程池大小或考虑使用更高级的线程池实现。
scheduler class: 'org.quartz.core.quartzscheduler' - running locally. not started. currently in standby mode. number of jobs executed: 0 using thread pool 'org.quartz.simpl.simplethreadpool' - with 20 threads. using job-store 'org.springframework.scheduling.quartz.localdatasourcejobstore' - which supports persistence. and is clustered.
### 回答1:
scheduler类:'org.quartz.core.quartzscheduler' - 在本地运行。尚未启动。当前处于待机模式。执行的作业数量:,使用线程池'org.quartz.simpl.simplethreadpool' - 具有20个线程。使用作业存储'org.springframework.scheduling.quartz.localdatasourcejobstore' - 支持持久性并且是集群化的。
### 回答2:
这段话是关于Quartz调度器类的一个描述。Quartz是一个广泛使用的Java任务调度框架,它有一个核心调度器类- 'org.quartz.core.quartzscheduler'。这个调度器类在本地运行,但还没有启动,目前处于待机模式。待机模式意味着调度器已准备好开始调度任务,但尚未执行任务。截止到目前为止,还没有执行任何任务,因为任务调度还没有开始。
Quartz调度器使用线程池来管理任务的执行。这个调度器所使用的线程池是'org.quartz.simpl.simplethreadpool',该线程池有20个线程可以同时执行任务。这意味着该调度器可以同时执行20个任务。
Quartz调度器还使用一个名为'org.springframework.scheduling.quartz.localdatasourcejobstore'的作业存储来支持任务的持久性,这个作业存储可以集群化。作业存储是一个持久化任务数据的机制,可以将任务调度信息存储在持久化存储中,以便在系统关闭或重新启动时能够恢复任务。
总的来说,Quartz调度器类是一个非常有效的任务调度框架,它可以处理多个并发任务,并具有独特的线程池和作业存储机制,能够提供一些非常有用的功能,例如持久化任务数据和集群化等,从而使任务调度变得更加灵活和可靠。
### 回答3:
scheduler类是一个Java编写的调度器。它经常被用来定时执行任务,如定时发邮件、备份数据库、清理日志等。在这里,scheduler类的名称是“org.quartz.core.quartzscheduler”,表示它的核心代码是使用Quartz框架编写的。现在,这个scheduler类处于本地模式运行。即它是在本地计算机上运行的,并且还没有被启动。因此,目前处于待机状态。
在待机状态下,scheduler类并没有执行任何任务,所以它已经执行的任务数是0。为了让scheduler类执行任务,我们需要启动它。但是,任务的执行需要线程池的支持。在这里,scheduler类使用的是一个叫做“org.quartz.simpl.simplethreadpool”的线程池,它包含了20个线程。这意味着,scheduler类可以在启动后同时执行20个任务。
在任务执行过程中,scheduler类需要将任务的状态持久化。这意味着即使scheduler类重新启动,它也能知道哪些任务已经被执行,哪些任务还没有被执行。为了达到这个目的,scheduler类使用了一个叫做“org.springframework.scheduling.quartz.localdatasourcejobstore”的job-store,它支持持久化,也支持集群。这意味着,即使在多台计算机之间,scheduler类也能持久化任务的状态,并且不出现数据冲突的问题。
综上所述,scheduler类是一个非常强大的调度器,可以支持多线程执行任务,支持状态持久化,并且可以在多台计算机之间共享。因此,它在许多应用程序中都被广泛使用。
阅读全文