当作业不是先发制人时,最短作业优先算法的时间复杂度

时间:2017-07-07 18:43:32

标签: algorithm operating-system

最短作业优先算法是通过最小堆数据结构实现的。 那么SJF算法的时间复杂度是多少?

我在某处读过它是n * 2 * log n,它等于n log n。请解释一下。 (对不起,如果这个问题太容易了。我是新手。)

提前致谢。

2 个答案:

答案 0 :(得分:1)

InsertExtract-Min操作的运行时间均为O(log n)。有n个任务,每个任务都必须插入堆中,然后从堆中提取,导致运行时间为O(n log n)

Insert的运行时间为O(log n)的原因是,在插入时我们首先将新任务添加到堆最终位置。这不一定保持heap property,因为新任务的开头可能比其父级的优先级更好(拥有更小的密钥)。这就是Insert操作涉及Heapify-Up procedure的原因,其目的是恢复堆顺序。 Heapify-Up程序的运行时间为O(log n)

Extract-Min的运行时间为O(log n)的原因是在Extract-Min操作中我们首先删除堆的根(第一个任务),然后将最后一个任务移到第一个位置(即用驻留在最后位置的任务替换root)。由于这可能违反了堆属性,Extract-Min涉及执行Heapify-Down procedureHeapify-Down程序的运行时间也为O(log n)

答案 1 :(得分:0)

可以使用段树以O(nlogn)时间复杂度完成非抢先sjf。 接受struct中进程的输入,并根据struct数组进行排序 到达时间。现在,我们将使用段树查找范围的最小突发时间和相应的进程ID,这将需要 2 * logn 进行查询并同时更新两者。