【发布时间】:2018-02-04 16:23:38
【问题描述】:
我有一个关于作业(非抢占式)调度算法的算法复杂性的问题,特别是用于获得 1||sum(Uj) 问题(仅限一台机器)的最优解,其中 Uj 是单一惩罚(即:如果作业在截止日期前终止,则等于 0,如果晚终止,则等于 1。
我需要最小化单一惩罚的总和(即:迟到工作的总和)。给出了作业处理时间,以及它们的截止日期,并且没有发布时间(因此,所有作业在时间 t=0 时同步发布)。 该算法的工作原理如下:
1- 根据最早到期日对所有作业进行排序
2- 确定第一个迟到的工作 Jj。如果没有迟到的作业,请转到第 4 步。
3- 确定 Jj 与其前任之间处理时间最长的作业。删除该作业并返回第 2 步,考虑没有删除作业的新序列
4- 最佳序列由以下公式给出:当前序列 [后跟] 在步骤 3 中以任意顺序移除的作业子集。
我被要求计算这个算法的最坏情况 O(...) 复杂度,在一般和良好实现的情况下(所以,我现在必须尝试猜测“无实现”的复杂度,给定所有算法步骤)。
我认为第 1 步需要 O(nlogn),因为(使用 QuickSort 或 MergeSort)这只是一个排序问题。
但是,步骤 2-3-4 呢?如果我们尝试在 C/C++ 中实现这个最终复杂度可能是 O(n^2) 是否正确?还是由于 EDD“优化”了后续搜索,它是 O(n*logn)?确定其复杂性的可能证据是什么?
非常感谢。
【问题讨论】:
标签: algorithm time-complexity complexity-theory scheduling