在Θ(n)时间

时间:2016-01-24 22:34:53

标签: algorithm sorting time analysis

问题是对包含n个不同整数的列表进行排序,其值范围从1到kn,其中k是固定的正整数。设计一种算法来解决Θ(n)时间内的问题。

我不只是想要一个答案。解释会有所帮助,或者如果有人能让我指出正确的方向。

我知道Θ(n)时间意味着算法时间与元素数量成正比。不知道从哪里去。

2 个答案:

答案 0 :(得分:1)

固定k很容易:创建一个kn计数器数组。将它们全部设置为零。迭代数组,如果数组元素等于i,则将计数器i增加1。使用计数器数组重新创建已排序的数组。

如果k>显然这是低效的。登录

答案 1 :(得分:0)

关键是整数的范围从1到kn,因此它们的长度是有限的。这有点棘手:

当我们说排序算法是O(N)时,常见的假设是数字N适合于恒定数量的机器字,因此我们可以在恒定时间内对该大小的数字进行数学运算。 遵循此假设,kN 适合恒定数量的机器字,因为k是固定正整数。因此,您的输入为O(N)字长,每个字都是固定的位数,因此您的输入为O(N)位长。

因此,任何花费时间与输入中的位数成比例的算法都被认为是O(N)。

实际上有很多选择,但是当以这种特殊方式询问这个特定问题时,提问的人通常会想要你提出一个基数类型:

https://en.wikipedia.org/wiki/Radix_sort

MSB-first radix sort只是根据其前W位的值将整数划分为2 ^ W桶,然后根据下一个W位等对每个桶进行分区,直到处理完所有位。

这个时间是O(N *(word_size / W)),但正如我们所说的那样,字大小是常数,W是常数,所以这是O(N)。