【问题标题】:Scheduling algorithm with waiting time and priority具有等待时间和优先级的调度算法
【发布时间】:2018-03-14 17:40:24
【问题描述】:

我浏览了一系列调度算法及其实现,但找不到任何参考来实现解决以下问题的算法。

给定具有 n 个进程的进程数组,第 i 个进程表示为:

Arrival[i]代表它的到达时间,

Depart[i] 表示进程将被终止的时间(处理或未处理无关紧要)和

Time[i] 表示为进程提供服务所需的时间,并且

Preferred[i] 表示布尔值(如果首选该过程则为 true,否则为 false)

我们需要安排流程以最大限度地处理首选流程。

一次只能服务一个进程,如果一个进程在完成之前离开,它就被称为未处理。否则,一旦启动,进程将无法暂停或中断。

“最佳”解决方案的标准依次为:

  1. 服务的首选流程。
  2. 服务的大多数非首选进程
  3. 总处理时间最短。

任何想法都将不胜感激。

【问题讨论】:

  • 没有给出爆发时间?
  • 我不认为经典计算过程具有这样的属性,因此没有实现调度程序。它看起来更像是排队论练习。
  • @VidorVistrom 添加了缺少的属性。
  • 在我看来像标准的最高优先级,只是增加了出发时间的限制
  • @Ashutosh:(A) 你的评价说“如果出现平局”,但我还没有看到任何适用的指标。到底是什么关系? (B) 如果一个进程在完成之前离开,它可以重新启动吗?如果是这样,我们在什么时候重新开始?这极大地影响了解决方案:如果我们必须重新开始,那么启动一个我们必须中断的进程根本没有意义,我们可以将这些从考虑中删除。这会将问题简化为轻度增强的区间问题。

标签: algorithm scheduling


【解决方案1】:

我怀疑您的最佳解决方案将是一个简单的回溯算法 - 尝试所有可能性,并用“遗漏点”的分数来评估每个可能性:尽量减少您执行的首选过程的数量完成。

首先,进行一点预处理:

  • 将列表划分为首选列表和非首选列表。
  • 按到达时间对每个列表进行排序。
  • 对于每个流程,从出发时间中减去处理时间;这会产生“最晚开始时间”,这对我们来说是一个更有用的数字。

现在,只需执行经典的 try-everything 递归:

Base Case:
    If process list is empty, move to handling non-preferred processes in a similar function.

Case 1: Serve the first process `P` on the list.
    skipped [remains unchanged]
    new_served_list = served_list + P (append)
    new_start = current start time + `Time(P)`
    new_total = total processing time + `Time(P)`
    // remove processes whose latest start time will be passed:
    new_proc_list = proc_list - {any process with `latest_start(P) < start_time`}.
    Recur on (new_start, new_total, new_served_list, new_proc_list)
    save `result_1`

Case 2: *Don't* serve the first process.
    new_skipped = skipped + 1
    new_proc_list = proc_list - `P`.
    recur on (start, total, served_list, new_proc_list)
    save `result_2

Compare result_1 and result_2; return the better one.

对于非首选进程,您仍然需要一个类似的功能——但必须将进程适应首选进程的间隙。我将把这个扩展作为学生的练习。 :-)

请注意,它分解为许多小问题,每个开区间一个。

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    相关资源
    最近更新 更多