对许多键相同的数组进行排序 - 时间复杂度分析

时间:2016-03-24 15:21:36

标签: time-complexity

问题是这样的:

  

给定n个元素的数组,其中个元素相同。排序数组的最坏情况时间复杂度(使用RAM模型假设)将是:

     
      
  1.   
  2.   
  3.   
  4.   
  5.   
  6.   

所以,我想使用选择算法来找到大小为的元素,称之为P.这应该采用O(n)。接下来,我将任何与此元素不相等的元素放在另一个数组中。总的来说,我将有k = n-n ^(2001/2002)元素。对此数组进行排序将花费O(klog(k)),其等于O(nlogn)。最后,我会发现小于P的max元素和大于P的min元素,我可以对数组进行排序。

所有这些都需要O(nlogn)。

注意:如果enter image description here,那么我们可以减少到O(n)的时间。

我有两个问题:我的分析是否正确?有没有办法减少时间复杂度?此外,什么是RAM模型假设?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的分析错误 - 无法保证n^(2001/2002)最小元素实际上是重复元素之一。

至少在理论上,

n^(2001/2002)重复根本不构成足够的输入以使事情变得容易。对输入进行排序仍然至少与对n - n^(2001/2002) = O(n)其他元素进行排序一样困难,并且在RAM模型中的标准比较排序假设下,至少需要O(n*log(n))最坏情况时间。

(对于实际输入大小,n^(2001/2002)重复项将至少为输入的98%,因此隔离重复项并对其余项进行排序将既简单又高效。这是渐近的情况之一分析并没有反映我们在实践中关心的行为。)