为什么这是成本?

时间:2014-08-07 15:33:35

标签: algorithm sorting quicksort

Quicksort的算法是:

Quicksort(A,p,r)
      if p<r then
         q<- partition(A,p,r)
         Quicksort(A,p,q-1)
         Quicksort(A,q+1,r)

根据我的说明,Quicksort(A,1,n)的成本是T(n)= T(q)+ T(n-q)+分割成本。

为什么成本是这样而不是:T(n)= T(q-1)+ T(n-q)+分配成本?

为什么最坏情况下的成本T(n)= T(n-1)+Θ(n)?

2 个答案:

答案 0 :(得分:1)

我对第二个问题的答案更有信心。

在最坏的情况下,枢轴总是可以变成阵列中的最小数字(或最高数字)。在这种情况下,分开的阵列的长度分别为n-1和0。因此,递归关系应为:

T(n)= T(n-1)+T(0) + Work done for partition
    = T(n-1) + 0 + O(n)

例如,在最坏的情况下,如果数组最初按升序排序,并且您决定始终选择第一个元素作为枢轴。

Initial Array: {1, 2, 3, 4, 5}
Pivot Element: 1.
Partitioned arrays: {} and {2,3,4,5}
Next pivot element: 2
Partitioned arrays: {} {3,4,5}
...

在这里你可以看到,在每个分区,问题的大小只减少1而不是减半。

Hence T(n) = T(n-1) + Work done for partitioning( O(n) )

答案 1 :(得分:1)

  1. 执行时间复杂度分析时,仅考虑具有最高指数的条款。这是因为当输入变大时,只有具有最高指数的术语仍然相关。例如:O(0.0001n^3 + 0.002n^2 + 0.1n + 1000000) = O(n^3)。它遵循T(q-1) = T(q),因为-1q的大值无关。

  2. 我不确定您的笔记是否完全准确。 user1990169已经很好地回答了为什么一般的Quicksort具有O(n^2)的最差情况时间复杂度,但实际上可能花费O(n)时间来确定未排序的n元素数组的中位数,这意味着我们总是可以在每次迭代中选择枢轴的中值(最佳值)。 T(n)=T(n-1)+Θ(n)的时间复杂度可能来自一个所有元素具有相同值的数组,在这种情况下,根据实现,除了pivot之外的所有元素都可以放入 LEFT 分区或 RIGHT 分区。但是,通过一些巧妙的实现,即使这样也可以避免。因此,T(n)=T(n-1)+Θ(n)的复杂性分析可能来自Quicksort的特定实现,而不是最佳实现。