给定算法的时空复杂度

时间:2019-09-13 08:17:56

标签: algorithm time-complexity complexity-theory space-complexity

我有一种算法,想找到它的时间和空间复杂性。 算法是

 Algorithm for Scheduling
 INPUT:P1,P2, PN // N processes
 do
  Sort processes in ascending according to their burst time 
  TQ = median of burst time of processes 
  For (i=1 to N )
   Assign TQ to Process Pi 
   If Burst time of process i < TQ 
    remove Process i from array
   Else
    BT of process i = BT of process i - TQ
  Compute waiting time for all process in array
 While (array of processes != empty)

如何计算该算法的时间和空间复杂度?

1 个答案:

答案 0 :(得分:0)

在注释中,您声明需要 O(1)来更新进程的等待时间,因此这意味着以下行需要 O(N):< / p>

Compute waiting time for all process in array

关于remove操作,您还建议它是 O(1),尽管您不应该将相应的等待时间设置为零,因为这会影响阵列上的其他操作(例如排序和获取中位数)。更好的方法是将最后一个进程复制到插槽i中,然后从数组中删除最后一个元素。就是 O(1)

执行for循环将花费 O(N)。在排序数组中找到中位数也是 O(N),因此在do主体中,时间复杂度最大的操作是排序: O(N⋅logN)

do循环的每次迭代中,数组大小( N )减半。

所以我们有以下等式(省略了big-O表示法):

T(N) = N⋅log(N) + T(N/2)
     = N⋅log(N) + (N/2)⋅log(N/2) + (N/4)⋅log(N/4) + ...
     = N⋅(log(N) + (1/2)⋅log(N/2) + (1/4)⋅log(N/4) + ...)

现在 log(N / c) = log(N)-log(c),因此我们可以将术语归类如下:

     = N⋅((1 + 1/2 + 1/4 + ...)⋅log(N) - log(2)/2 - log(4)/4 - log(8)/8 - ...)
     = N⋅(2⋅log(N) - log(2)/2 - log(4)/4 - log(8)/8 - ...)
     < 2N⋅log(N)

因此,我们开始认为T(N)至少为 O(N⋅log(N)),然后得出它最多为 O(N⋅log(N) )),因此我们对时间复杂度有严格的限制:

O(N⋅log(N))