问题是这样的:
给定n个元素的数组,其中个元素相同。排序数组的最坏情况时间复杂度(使用RAM模型假设)将是:
- 醇>
所以,我想使用选择算法来找到大小为的元素,称之为P.这应该采用O(n)。接下来,我将任何与此元素不相等的元素放在另一个数组中。总的来说,我将有k = n-n ^(2001/2002)元素。对此数组进行排序将花费O(klog(k)),其等于O(nlogn)。最后,我会发现小于P的max元素和大于P的min元素,我可以对数组进行排序。
所有这些都需要O(nlogn)。
我有两个问题:我的分析是否正确?有没有办法减少时间复杂度?此外,什么是RAM模型假设?
谢谢!
答案 0 :(得分:1)
您的分析错误 - 无法保证n^(2001/2002)
最小元素实际上是重复元素之一。
n^(2001/2002)
重复根本不构成足够的输入以使事情变得容易。对输入进行排序仍然至少与对n - n^(2001/2002) = O(n)
其他元素进行排序一样困难,并且在RAM模型中的标准比较排序假设下,至少需要O(n*log(n))
最坏情况时间。
(对于实际输入大小,n^(2001/2002)
重复项将至少为输入的98%,因此隔离重复项并对其余项进行排序将既简单又高效。这是渐近的情况之一分析并没有反映我们在实践中关心的行为。)